Wi-Fi modülü güncellenebilir, yani normal Android yayın döngüsü 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 avantajları 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 yönelik düzeltmeler alır.
Uygulama geliştiricileri, daha az platform parçalanması elde eder.
OEM'ler taşıyıcı gereksinimlerini karşılarken aynı zamanda bireysel özelleştirmelerin 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
dosyaları)
-
-
proto/
-
Android.bp
-
proguard.flags
-
wifi.rc
-
-
OsuLogin/
(frameworks/base/packages/OsuLogin
) -
ServiceResources/
(Android 12'de yeni, Yer Paylaşımlı APK bildirimi burada depolanır)-
res/
(Android 11'de yeni,frameworks/base/core/res/res
res'ten çıkarılan Wi-Fi yapılandırmaları) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(hizmet tarafından talep edilen kullanıcı diyaloglarını başlatmak için Android 13 Uygulamasında yeni olan burada depolanır.)-
src/
-
com/android/wifi/dialog
(Diyalogların başlatıldığı Aktiviteyi içerir)
-
-
AndroidManifest.xml
-
Android.bp
-
-
Yukarıdaki dizinler ayrıca modüler sistem bileşeninin dışında kalan ve geçerli konumunda kalan kodu da içerir, örneğin:
-
wificond interface
(android.net.wifi.nl80211
paketindeki sınıflar, örneğin,WifiNl80211Manager
) - Örnek Kaynak Yerleşimi uygulaması
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
OEM'ler, yamalarını orijinal proje dizinlerinden yeni proje dizinine taşımaya yardımcı olması için örnek komutları kullanabilir.
Bir yamayı çerçevelerden/temelden/wifi'den taşıma
Yama dosyası root/frameworks/base/wifi içinde oluşturuluyor
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
Geçiş sırasında dizin hiyerarşisi değiştirildiğinden, yamayı frameworks/opt/net/wifi
taşımak için karmaşık adımlar gerekir.
frameworks/opt/net/wifi
içinde, taahhüdü biri service/
ve diğeri tests/
için olmak üzere iki taahhüde bölün.
HEAD taahhüdünü geçirme
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 yama dosyası oluşturma
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 taahhüdü tek bir taahhüde sıkıştırmak
git rebase -i
İkinci taahhüdün 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 işlemi içinde çalışmaya devam eder. Wi-Fi modülü, aşağıdakiler dahil olmak üzere packages/modules/Wifi
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 parçası olmaya devam eden aşağıdaki bileşenleri hariç tutar.
-
system/connectivity/wificond
içindekiwificond
yerel bileşeni -
wificond
arabirimi (android.net.wifi.nl80211
paketindeki sınıflar, örneğin,WifiNl80211Manager
) -
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 gelecekteki sürümler taşıyabilir. Dosya konumu değişikliklerinin taşınmasıyla ilgili çabayı azaltmak için, AOSP'ye mümkün olduğunca çok değişikliğin yukarı akışını öneririz (bunları Android 11'e taşıdıktan veya tescilli uzantıları AOSP kodundan çözmek için resmi Android API'lerini veya satıcı HAL uzantılarını kullanacak şekilde yeniden düzenledikten sonra).
Modül formatı
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 (
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, çerçeveyle yalnızca kararlı @SystemApi
kullanarak 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ı için yapılandırma değerlerini özelleştirin.
Çalışma zamanı kaynak yer paylaşımlarını kullanma
RRO'ları kullanarak varsayılan yapılandırmaları geçersiz kılarak Wi-Fi modülünü özelleştirebilirsiniz. Bindirilebilir yapılandırmaların listesi için, package 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 bindirme uygulaması için device/google/coral/rro_overlays/WifiOverlay/
.
device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
dosyası, targetPackage
özniteliğini com.android.wifi.resources
olarak ayarladığından ve Wi-Fi modülü tarafından sağlanan kaynak APK, com.google.android.wifi.resources
, Wi-Fi yapılandırmalarını başarıyla kaplamak için yer paylaşımı APKS targetPackage
com.google.android.wifi.resources
olarak ayarlamanız gerekir.
Yapılandırma depolama formatını taşıma
Wi-Fi modülü yalnızca AOSP Wi-Fi yapılandırma depolama biçimini ayrıştırabilir. Wi-Fi yapılandırma depolama formatını (kullanıcının kayıtlı ağ listesini içeren) 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 formatına 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 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)
/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çıklama eklenmiş 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
özniteliğini public olarak değiştirerek, packagepackages/modules/Wifi/framework/Android.bp
framework-wifi
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. ], ... }
Kitaplık erişimine izin vermek için derleme kuralını değiştirin
@hide
Wi-Fi API'lerini gizleyin. Örneğin, aşağıda birjava_library
için bir derleme kuralı verilmiştir.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
foo-lib
için kitaplık 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", ], }
framework-wifi.impl
libs
framework
önce göründüğünden emin olun.libs
özniteliğ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
ek açıklamalı sembollere Wi-Fi modülü içinde 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 @hide
harici API'leri (örneğin, framework.jar
) service-wifi
wifi'de kullanmaya devam edebilir. frameworks/opt/net/wifi/service/Android.bp
Hem
wifi-service-pre-jarjar
hem deservice-wifi
sdk_version
özniteliğinicore_platform
olarak değiştirin.Hem
wifi-service-pre-jarjar
hem deservice-wifi
içinde,libs
özniteliğ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. Wi-Fi Testi, Hata Ayıklama ve Ayarlama bölümlerinde açıklanan testleri de çalıştırabilirsiniz.