Wi-Fi modülü güncellenebilir, yani normal Android sürüm döngüsünün dışındaki işlevsellik güncellemelerini alabilir. Bu modül aşağıdaki bileşenleri içerir.
Şekil 1. Wi-Fi modülü bileşenleri ve mimarisi
Wi-Fi modülü aşağıdaki faydaları sağlar.
Son kullanıcılar, Android cihazlarda tutarlı bir Wi-Fi deneyimi yaşar ve modül güncellemeleri aracılığıyla birlikte çalışabilirlik sorunlarına çözüm bulur.
Uygulama geliştiricileri platform parçalanmasını azaltır.
OEM'ler taşıyıcı gereksinimlerini karşılarken aynı zamanda bireysel özelleştirme maliyetlerini de azaltabilirler (çünkü aynı gereksinimlerin farklı şekillerde farklı uygulamalarına ihtiyaç duymazlar).
Android 12 ve Android 13 için modül sınırı
-
packages/modules/Wifi
-
framework
-
java/
-
android/net/wifi
(frameworks/base/wifi/java
dosyalar)
-
-
tests/
-
android/net/wifi
(frameworks/base/wifi/tests
dosyaları)
-
-
aidl-export/
-
api/
-
Android.bp
-
-
service/
-
java/
-
com/android/server/wifi
(frameworks/opt/net/wifi/service/java
dosyalar)
-
-
tests/
-
com/android/server/wifi
(frameworks/opt/net/wifi/tests
dosyasındaki dosyalar)
-
-
proto/
-
Android.bp
-
proguard.flags
-
wifi.rc
-
-
OsuLogin/
(frameworks/base/packages/OsuLogin
dosyalar) -
ServiceResources/
(Android 12'de yeni, Overlay APK bildirimi burada saklanır)-
res/
(Android 11'deki yeni, Wi-Fi yapılandırmalarıframeworks/base/core/res/res
adresinden alınmıştır) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(hizmet tarafından talep edilen kullanıcı diyaloglarını başlatmak için Android 13 Uygulamasındaki yeni özellik burada saklanır.)-
src/
-
com/android/wifi/dialog
(Diyalogların başlatıldığı Etkinliği içerir)
-
-
AndroidManifest.xml
-
Android.bp
-
-
Yukarıdaki dizinler ayrıca modüler sistem bileşeninin dışında ve geçerli konumunda kalan kodu da içerir, örneğin:
-
wificond interface
(android.net.wifi.nl80211
paketindeki sınıflar, örneğinWifiNl80211Manager
) - Örnek Kaynak Yer Paylaşımı uygulaması
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
OEM'ler yamalarını orijinal proje dizinlerinden yeni proje dizinine taşımaya yardımcı olmak için örnek komutları kullanabilir.
Bir yamayı çerçevelerden/temelden/wifi'dan taşıma
Yama dosyasını root/frameworks/base/wifi konumunda oluşturma
git format-patch -1 commit --stdout > patch-file.txt
Yama dosyasını kök/paketler/modüller/Wifi'ye uygulama
git am -p2 --directory=framework/ patch-file.txt
Bir yamayı çerçevelerden/opt/net/wifi'den taşıma
Yamayı frameworks/opt/net/wifi
taşımak için, taşıma sırasında dizin hiyerarşisi değiştiğinden karmaşık adımlar gereklidir.
frameworks/opt/net/wifi
, taahhüdü biri service/
ve diğeri tests/
için olmak üzere iki işleme bölün.
HEAD taahhüdünü taşıma
git reset HEAD^
git add service/
git commit # Enter your commit message. Call this commit service-commit
git add tests/
git commit # Enter your commit message. Call this commit test-commit
İki taahhüt düzeltme eki dosyası oluşturuluyor
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
İki yamayı paketlere/modüllere/Wifi'ye uygulama
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
İki işlemin tek bir işleme dönüştürülmesi
git rebase -i
İkinci işlemin işlemini squash
olarak değiştirin.
Taahhüt mesajını uygun şekilde düzenleyin.
Android 11 için modül sınırı
Wi-Fi hizmeti, Sistem Hizmeti süreci içinde çalışmaya devam eder. Wi-Fi modülü, aşağıdakiler de dahil olmak üzere packages/modules/Wifi
içindeki tüm kodları içerir.
-
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
veWifiRttService
için SDK ve hizmet sınıfları -
OsuLogin
-
ServiceWifiResources
Modül, OEM'in AOSP yapısının bir parçası olarak kalan aşağıdaki bileşenleri hariç tutar.
-
system/connectivity/wificond
wificond
yerel bileşeni -
wificond
arayüzü (android.net.wifi.nl80211
paketindeki sınıflar, örneğinWifiNl80211Manager
) -
android.net.wifi.SoftApConfToXmlMigrationUtil
-
android.net.wifi.WifiNetworkScoreCache
-
android.net.wifi.WifiMigration
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
Android 11 dosyaları taşımaz ancak gelecek sürümlerde taşıyabilir. Dosya konumu değişikliklerini taşıma çabasını azaltmak için, AOSP'ye mümkün olduğunca çok değişiklik yapmanızı öneririz (bunları Android 11'e taşıdıktan veya resmi Android API'lerini veya satıcı HAL uzantılarını kullanarak bunları AOSP kodundan ayırmak için özel uzantıları yeniden düzenledikten sonra).
Modül formatı
Wi-Fi modülü ( com.android.wifi
) APEX formatındadır ve Android 11 veya üstünü çalıştıran cihazlarda kullanılabilir. APEX dosyası aşağıdaki bileşenleri içerir.
- SDK kitaplığı (
framework-wifi.jar
) - Servis kitaplığı (
service-wifi.jar
) - OsuLogin APK (
OsuLoginGoogle.apk
) - Kaynak APK (
ServiceWifiResourcesGoogle.apk
) - WFA sertifikaları
Modül bağımlılıkları
Wi-Fi modülü aşağıdaki bileşenlere bağlıdır.
- Bağlantı
- Telefon
- Proto kitaplıkları
- Çeşitli sistem bileşenleri
- WiFi HAL'leri
-
wificond
-
bouncycastle
-
ksoap2
-
libnanohttpd
Bu modül, yalnızca kararlı @SystemApi
kullanarak çerçeveyle etkileşime girer ( @hide
API kullanımı yoktur) ve platform imzası yerine bir Google imzasıyla imzalanır.
Özelleştirme
Wi-Fi modülü doğrudan özelleştirmeyi desteklemez ancak çalışma zamanı kaynak katmanlarını (RRO'lar) veya operatör yapılandırmalarını kullanarak yapılandırmayı özelleştirebilirsiniz.
Şekil 2. Wi-Fi modülü özelleştirmesi
- Küçük özelleştirmeler için RRO
config
ayarları etkinleştirin veya devre dışı bırakın. - Daha fazla kontrol için
@SystemAPI
olarak gösterilen herhangi bir taşıyıcı yapılandırma anahtarının yapılandırma değerlerini özelleştirin.
Çalışma zamanı kaynak katmanlarını kullanma
RRO'ları kullanarak varsayılan yapılandırmaları geçersiz kılarak Wi-Fi modülünü özelleştirebilirsiniz. Yerleştirilebilir yapılandırmaların bir listesi için packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
bakın. Yapılandırma davranışı ayrıntıları için packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
bakın. Örnek bir yer paylaşımı uygulaması için, device/google/coral/rro_overlays/WifiOverlay/
adresine bakın.
Çünkü device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
dosyası targetPackage
özelliğini com.android.wifi.resources
olarak ayarlar ve Wi-Fi modülü tarafından sağlanan kaynak APK'nın paket adı com.google.android.wifi.resources
, Wi-Fi yapılandırmalarını başarıyla kaplamak için APKS targetPackage
kaplamasını com.google.android.wifi.resources
olarak ayarlamanız gerekir.
Yapılandırma depolama biçimini geçirme
Wi-Fi modülü yalnızca AOSP Wi-Fi yapılandırma depolama formatını ayrıştırabilir. Wi-Fi yapılandırma depolama biçimini (kullanıcının kayıtlı ağ listesini içerir) daha önce değiştirdiyseniz, bir cihazı Wi-Fi modülünü içeren herhangi bir Android sürümüne yükseltirken bu verileri AOSP biçimine dönüştürmeniz gerekir. Bu dönüşüm için gereken kancalar android.net.wifi.WifiMigration
sınıfındadır.
Format dönüştürmeyi aşağıdaki yöntemlerle uygulayın.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
AOSP formatına dönüştürülmüş Wi-Fi paylaşımlı mağaza dosyası içeriğini almak için Wi-Fi modülü tarafından çağrılır.
Bu dosyalar daha önce (Android 10'da) cihazdaki
/data/misc/wifi
klasöründe saklanıyordu.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
AOSP formatına dönüştürülmüş Wi-Fi kullanıcısına özel mağaza dosyası içeriklerini almak için Wi-Fi modülü tarafından çağrılır.
Bu dosyalar daha önce (Android 10'da) cihazdaki
/data/misc_ce/<userId>/wifi
klasöründe saklanıyordu.
Gizli Wi-Fi API'lerine erişme
Wi-Fi modülünde @hide
ile açıklamalı semboller (sınıflar, yöntemler, alanlar vb.) genel API yüzeyinin parçası değildir ve modülün kurulu olduğu cihazlarda bunlara erişilemez. Wi-Fi modülünü içermeyen cihazlar, aşağıdaki adımları kullanarak @hide
Wi-Fi API'lerini kullanmaya devam edebilir.
impl_library_visibility
özelliğini public olarak değiştirerekpackages/modules/Wifi/framework/Android.bp
adresindekiframework-wifi
uygulanan görünürlük kısıtlamalarını kaldırın.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Kütüphanenin
@hide
Wi-Fi API'lerine erişmesine izin vermek için derleme kuralını değiştirin. Örneğin, aşağıdaki birjava_library
için bir derleme kuralıdır.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
foo-lib
için kütüphane erişimine izin vermek için derleme kuralını aşağıda gösterildiği gibi değiştirin.java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
libs
listesindeframework-wifi.impl
öğesininframework
önce göründüğünden emin olun.libs
özelliğindeki bağımlılıkların sırası önemlidir.
Gizli çerçeve API'lerine erişme
Wi-Fi modülünün dışında @hide
ile açıklamalı sembollere Wi-Fi modülü içindeki kodla erişilemez. Wi-Fi modülünü içermeyen cihazlar frameworks/opt/net/wifi/service/Android.bp
aşağıdaki değişiklikleri yaparak service-wifi
@hide
harici API'lerini (örneğin, framework.jar
) kullanmaya devam edebilir. frameworks/opt/net/wifi/service/Android.bp
.
Hem
wifi-service-pre-jarjar
hem deservice-wifi
,sdk_version
niteliğinicore_platform
olarak değiştirin.Hem
wifi-service-pre-jarjar
hem deservice-wifi
,libs
özelliğineframework
veandroid_system_server_stubs_current
ekleyin.Sonucun aşağıdaki kod örneğine benzer olduğunu doğrulayın.
java_library { name: "wifi-service-pre-jarjar", ... sdk_version: "core_platform", ... libs: [ ... "framework", "android_system_server_stubs_current", ], } ... java_library { name: "service-wifi", ... sdk_version: "core_platform", ... libs: [ ... "framework", "android_system_server_stubs_current", ], }
Test yapmak
Android Uyumluluk Test Paketi (CTS), her modül sürümünde kapsamlı bir dizi CTS testi çalıştırarak Wi-Fi modülünün işlevselliğini doğrular. Ayrıca Wi-Fi Test Etme, Hata Ayıklama ve Ayarlama bölümünde açıklanan testleri de çalıştırabilirsiniz.