Wi-Fi modülü güncellenebilir. Bu sayede, normal Android sürüm döngüsü dışında özellik güncellemeleri alabilir. Bu modül aşağıdaki bileşenleri içerir.
Şekil 1. Kablosuz modül bileşenleri ve mimarisi
Wi-Fi modülü aşağıdaki avantajları sunar.
Son kullanıcılar, Android cihazlarda tutarlı bir kablosuz deneyimi elde eder ve modül güncellemeleri sayesinde birlikte çalışabilirlik sorunları düzeltilir.
Uygulama geliştiriciler, platform parçalanması sorununu daha az yaşar.
OEM'ler, operatörlerin şartlarını karşılayabilir ve aynı zamanda bireysel özelleştirmelerin maliyetini düşürebilir (aynı şartların farklı şekillerde uygulanması gerekmediği için).
Android 12 ve Android 13 için modül sınırı
packages/modules/Wififrameworkjava/android/net/wifi(frameworks/base/wifi/javadosyaları)
tests/android/net/wifi(frameworks/base/wifi/testsdosyaları)
aidl-export/api/Android.bp
service/java/com/android/server/wifi(frameworks/opt/net/wifi/service/javakaynaklı dosyalar)
tests/com/android/server/wifi(frameworks/opt/net/wifi/testskaynaklı dosyalar)
proto/Android.bpproguard.flagswifi.rc
OsuLogin/(frameworks/base/packages/OsuLogindosyaları)ServiceResources/(Android 12'de yeni, yer paylaşımı APK manifesti burada saklanır)res/(Android 11'de yeni, Wi-Fi yapılandırmaları şuradan çıkarıldı:frameworks/base/core/res/res)AndroidManifest.xmlAndroid.bp
WifiDialog/(Android 13'te yeni: Hizmet tarafından istenen kullanıcı iletişim kutularını başlatmak için kullanılan uygulama burada saklanır.)src/com/android/wifi/dialog(İletişim kutularının başlatıldığı etkinliği içerir)
AndroidManifest.xmlAndroid.bp
Önceki dizinler, modüler sistem bileşeninin dışında kalan ve mevcut konumunda bulunan kodu da içerir. Örneğin:
wificond interface(android.net.wifi.nl80211paketindeki sınıflar, örneğinWifiNl80211Manager)- Örnek Kaynak Eşlemesi uygulaması
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
OEM'ler, yamalarını orijinal proje dizinlerinden yeni proje dizinine taşımak için örnek komutları kullanabilir.
frameworks/base/wifi klasöründen bir yamayı taşıma
Yama dosyasını root/frameworks/base/wifi dizininde oluşturma
git format-patch -1 commit --stdout > patch-file.txtYama dosyasını root/packages/modules/Wifi'ye uygulama
git am -p2 --directory=framework/ patch-file.txtframeworks/opt/net/wifi dizininden bir yamayı taşıma
Yama, taşıma işlemi sırasında dizin hiyerarşisi değiştirildiği için frameworks/opt/net/wifi konumundan taşınırken karmaşık adımlar uygulanması gerekir.
frameworks/opt/net/wifi içinde, commit'i iki commit'e bölün. Biri service/, diğeri tests/ için olsun.
HEAD işleme noktasını taşıma
git reset HEAD^git add service/git commit # Enter your commit message. Call this commit service-commitgit add tests/git commit # Enter your commit message. Call this commit test-commit
İki kaydetme yama dosyası oluşturma
git format-patch -1 service-commit --stdout > service-patch.txtgit format-patch -1 test-commit --stdout > test-patch.txt
İki yamanın paketlere/modüllere/kablosuz ağa uygulanması
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
İki commit'i tek bir commit'te birleştirme
git rebase -iİkinci işlemeyi squash olarak değiştirin.
Commit mesajını uygun şekilde düzenleyin.
Android 11 için modül sınırı
Kablosuz ağ hizmeti, Sistem Hizmeti işleminde ç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,WifiScannerServiceveWifiRttServiceiçin SDK ve hizmet sınıflarıOsuLoginServiceWifiResources
Modül, OEM'in AOSP derlemesinin bir parçası olmaya devam eden aşağıdaki bileşenleri içermez.
system/connectivity/wificondiçindewificondyerel bileşenwificondarayüzü (android.net.wifi.nl80211paketindeki sınıflar, örneğinWifiNl80211Manager)android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Android 11 dosyaları taşımaz ancak gelecekteki sürümlerde bu özellik eklenebilir. Dosya konumu değişikliklerini taşıma işleminin zorluğunu azaltmak için, mümkün olduğunca çok değişikliği AOSP'ye aktarmanızı (Android 11'e taşıdıktan veya tescilli uzantıları AOSP kodundan ayırmak için resmi Android API'leri ya da tedarikçi HAL uzantılarını kullanacak şekilde yeniden düzenledikten sonra) öneririz.
Modül biçimi
Wi-Fi modülü (com.android.wifi), APEX biçimindedir ve Android 11 veya sonraki sürümlerin yüklü olduğu cihazlarda kullanılabilir. APEX dosyası aşağıdaki bileşenleri içerir.
- SDK kitaplığı (
framework-wifi.jar) - Hizmet kitaplığı (
service-wifi.jar) - OsuLogin APK'sı (
OsuLoginGoogle.apk) - Kaynak APK'sı (
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
- Kablosuz HAL'leri
wificondbouncycastleksoap2libnanohttpd
Bu modül, yalnızca kararlı @SystemApi (@hide API kullanımı yok) kullanarak çerçeveyle etkileşime girer ve platform imzası yerine Google imzasıyla imzalanır.
Özelleştirme
Kablosuz modülü doğrudan özelleştirmeyi desteklemez ancak çalışma zamanı kaynak yer paylaşımlarını (RRO'lar) veya operatör yapılandırmalarını kullanarak yapılandırmayı özelleştirebilirsiniz.
Şekil 2. Kablosuz modül özelleştirme
- Küçük özelleştirmeler için RRO'da
configayarları etkinleştirin veya devre dışı bırakın. - Daha fazla kontrol için
@SystemAPIolarak sunulan herhangi bir operatör yapılandırma anahtarının yapılandırma değerlerini özelleştirin.
Çalışma zamanında kaynak eşlemelerini kullanma
RRO'ları kullanarak varsayılan yapılandırmaları geçersiz kılarak Wi-Fi modülünü özelleştirebilirsiniz. Yerleştirilebilen yapılandırmaların listesi için packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml bölümüne bakın.
Yapılandırma davranışı hakkında ayrıntılı bilgi için packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml başlıklı makaleyi inceleyin.
Örnek bir yer paylaşımı uygulaması için device/google/coral/rro_overlays/WifiOverlay/ sayfasına bakın.
device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml dosyası, targetPackage özelliğini com.android.wifi.resources olarak ayarladığından ve Wi-Fi modülü tarafından sunulan kaynak APK'sının paket adı com.google.android.wifi.resources olduğundan, Wi-Fi yapılandırmalarını başarılı bir şekilde yerleştirmek için yerleştirme APK'larını targetPackage olarak ayarlamanız gerekir.com.google.android.wifi.resources
Yapılandırma depolama biçimini taşıma
Kablosuz modülü yalnızca AOSP kablosuz yapılandırma depolama biçimini ayrıştırabilir. Daha önce Kablosuz yapılandırma depolama biçimini (kullanıcının kayıtlı ağ listesini içerir) değiştirdiyseniz bir cihazı Kablosuz 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.
Biçim dönüştürmeyi aşağıdaki yöntemlerle uygulayın.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)AOSP biçimine dönüştürülmüş, kablosuz bağlantı ile paylaşılan depolama alanı dosya içeriklerini almak için kablosuz bağlantı modülü tarafından çağrılır.
Bu dosyalar daha önce (Android 10'da) cihazdaki
/data/misc/wifiklasöründe depolanıyordu.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)AOSP biçimine dönüştürülmüş, kablosuz kullanıcıya özel mağaza dosyası içeriklerini almak için kablosuz modül tarafından çağrılır.
Bu dosyalar daha önce (Android 10'da) cihazdaki
/data/misc_ce/<userId>/wifiklasöründe depolanıyordu.
Gizli Wi-Fi API'lerine erişme
Wi-Fi modülünde @hide ile ek açıklama eklenen semboller (sınıflar, yöntemler, alanlar vb.) modülün genel API yüzeyinin bir parçası değildir ve modülün yüklü olduğu cihazlarda erişilemez. Kablosuz modülü içermeyen cihazlar, aşağıdaki adımları uygulayarak @hide Kablosuz API'lerini kullanmaya devam edebilir.
framework-wifiöğesinepackages/modules/Wifi/framework/Android.bpkonumunda uygulanan görünürlük kısıtlamalarını,impl_library_visibilityözelliğini herkese açık olarak değiştirerek kaldırın.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }Kitaplık erişimine
@hideWi-Fi API'lerinin izin verilmesi için derleme kuralını değiştirin. Örneğin, aşağıdajava_libraryiçin bir derleme kuralı verilmiştir.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }foo-libiçin kitaplık erişimine izin vermek üzere derleme kuralını aşağıdaki gibi değiştirin:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }framework-wifi.implöğesinin,libslistesindeframeworköğesinden ö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
Kablosuz modülün dışında @hide ile açıklama eklenen sembollere, kablosuz modülün içindeki kodla erişilemez. Wi-Fi modülü içermeyen cihazlar, @hide harici API'leri (ör. framework.jar) service-wifi içinde kullanmaya devam edebilir. Bunun için frameworks/opt/net/wifi/service/Android.bp'de aşağıdaki değişiklikleri yapın.
wifi-service-pre-jarjarveservice-wifi'de her ikisinde desdk_versionözelliğinicore_platformolarak değiştirin.wifi-service-pre-jarjarveservice-wifiher ikisinde delibsözelliğineframeworkveandroid_system_server_stubs_currentözelliklerini 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
Android Compatibility Test Suite (CTS), her bir modül sürümünde kapsamlı bir CTS testi grubu çalıştırarak kablosuz modülün özelliklerini doğrular. Test etme, hata ayıklama ve Wi-Fi'yi ayarlama bölümünde açıklanan testleri de çalıştırabilirsiniz.