Wi-Fi modülü güncellenebilir. Bu sayede, normal Android sürüm döngüsü dışındaki özelliklerle ilgili güncellemeler alabilir. Bu modül aşağıdaki bileşenleri içerir.
1. şekil. Wi-Fi modülü bileşenleri ve mimarisi
Wi-Fi modülü aşağıdaki avantajları sağlar.
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ından daha az etkilenir.
OEM'ler, operatörlerin şartlarını karşılayabilir ve aynı zamanda bireysel özelleştirmelerin maliyetini düşürebilir (çünkü aynı şartların farklı şekillerde uygulanmasına gerek yoktur).
Android 12 ve Android 13 için modül sınırı
packages/modules/Wififrameworkjava/android/net/wifi(frameworks/base/wifi/javacihazından alınan dosyalar)
tests/android/net/wifi(frameworks/base/wifi/testscihazından alınan dosyalar)
aidl-export/api/Android.bp
service/java/com/android/server/wifi(frameworks/opt/net/wifi/service/javacihazından alınan dosyalar)
tests/com/android/server/wifi(frameworks/opt/net/wifi/testscihazından alınan dosyalar)
proto/Android.bpproguard.flagswifi.rc
OsuLogin/(frameworks/base/packages/OsuLogincihazından alınan dosyalar)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 ve mevcut konumunda kalan kodu da içerir. Örneğin:
wificond interface(android.net.wifi.nl80211paketindeki sınıflar, örneğinWifiNl80211Manager)- Örnek Kaynak Eşleme uygulaması
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
OEM'ler, yamalarını orijinal proje dizinlerinden yeni proje dizinine taşımalarına yardımcı olması için örnek komutları kullanabilir.
frameworks/base/wifi klasöründen bir yamayı taşıma
Kök/frameworks/base/wifi dizininde yama dosyasını 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, işlemeyi iki işleme ayırı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 taahhüt 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şeniwificondarayü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'de dosyalar taşınmaz 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'lerini 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ümleri çalıştıran 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ı
Kablosuz modül aşağıdaki bileşenlere bağlıdır.
- Bağlantı
- Telefon Hizmeti
- Proto kitaplıkları
- Çeşitli sistem bileşenleri
- Kablosuz HAL'ler
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ştirilebilir 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/ bölümüne 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 de 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 bağlantıya özel mağaza dosyası 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_ce/<userId>/wifiklasöründe depolanıyordu.
Gizli Wi-Fi API'lerine erişme
Wi-Fi modülünde @hide ile açıklama eklenen semboller (sınıflar, yöntemler, alanlar vb.) modülün herkese açık API yüzeyinin bir parçası değildir ve modülün yüklü olduğu cihazlarda bunlara erişilemez. Kablosuz modülü içermeyen cihazlar, aşağıdaki adımları uygulayarak @hide Kablosuz API'lerini kullanmaya devam edebilir.
framework-wifikimlikli öğe içinpackages/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,libslistesindeframeworköğesinden önce görünüyor olmalıdır.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 (örneğin, 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.Hem
wifi-service-pre-jarjarhem deservice-wifiöğesindelibsözelliğineframeworkveandroid_system_server_stubs_currentözelliklerini ekleyin.Sonucun aşağıdaki kod örneğine benzediğini 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 Uyumluluk Test Paketi (CTS), her modül sürümünde kapsamlı bir CTS testi grubu çalıştırarak kablosuz modülünü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.