Kablosuz modül güncellenebilirdir. Yani normal Android sürüm döngüsünün dışında özelliklerle ilgili güncellemeler alabilir. Bu modül aşağıdaki bileşenleri içerir.
Şekil 1. Kablosuz bağlantı modülü bileşenleri ve mimarisi
Kablosuz modül aşağıdaki avantajları sağlar.
Son kullanıcılar, Android cihazlarda tutarlı bir kablosuz bağlantı deneyimi elde eder ve modül güncellemeleri sayesinde birlikte çalışabilirlik sorunlarına yönelik düzeltmeler alır.
Uygulama geliştiriciler platform parçalanmasını azaltır.
OEM'ler, operatör şartlarını karşılarken aynı zamanda bireysel özelleştirmelerin maliyetlerini de düşürebilir (aynı şartların farklı şekillerde uygulanmasına gerek olmadığı için).
Android 12 ve Android 13 için modül sınırı
packages/modules/Wifi
framework
java/
android/net/wifi
(frameworks/base/wifi/java
'dan gelen 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
'dan gelen dosyalar)
tests/
com/android/server/wifi
(frameworks/opt/net/wifi/tests
'dan gelen dosyalar)
proto/
Android.bp
proguard.flags
wifi.rc
OsuLogin/
(frameworks/base/packages/OsuLogin
'dan gelen dosyalar)ServiceResources/
(Android 12'de yeni, yer paylaşımı APK manifesti burada depolanır)res/
(Android 11'de yeni, kablosuz ağ yapılandırmaları şuradan alınır:frameworks/base/core/res/res
)AndroidManifest.xml
Android.bp
WifiDialog/
(Android 13'te yenidir. Hizmet tarafından istenen kullanıcı iletişim kutularını başlatan uygulama burada saklanır.)src/
com/android/wifi/dialog
(İletişim kutularının başlatıldığı etkinliği içerir)
AndroidManifest.xml
Android.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.nl80211
paketindeki sınıflar, örneğinWifiNl80211Manager
)- Örnek Resource Overlay uygulaması
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_system_iface
OEM'ler, örnek komutları kullanarak yamalarını orijinal proje dizinlerinden yeni proje dizine taşıyabilir.
Bir yamayı frameworks/base/wifi'den taşıma
root/frameworks/base/wifi dizininde yama dosyası oluşturma
git format-patch -1 commit --stdout > patch-file.txt
Yama dosyasını root/packages/modules/Wifi'ye uygulama
git am -p2 --directory=framework/ patch-file.txt
Bir yamayı frameworks/opt/net/wifi'den taşıma
Dizin hiyerarşisi taşıma sırasında değiştirildiği için frameworks/opt/net/wifi
'ten yamayı taşımak için karmaşık adımlar gerekir.
frameworks/opt/net/wifi
uygulamasında, biri service/
ve diğeri tests/
için olmak üzere kaydı iki kayda bölün.
HEAD taahhütü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 kayı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/Kablosuz'a uygulama
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
İki commit'i tek bir commit olarak birleştirme
git rebase -i
İkinci kaydetme işlemini squash
olarak değiştirin.
Taahhüt mesajını uygun şekilde düzenleyin.
Android 11 için modül sınırı
Kablosuz ağ hizmeti, Sistem Hizmeti işlemi içinde çalışmaya devam eder. Wi-Fi modülü, aşağıdakiler de dahil olmak üzere packages/modules/Wifi
içindeki tüm kodu içerir.
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
veWifiRttService
için SDK ve hizmet sınıflarıOsuLogin
ServiceWifiResources
Modül, OEM'nin AOSP derlemesinin bir parçası olarak kalan aşağıdaki bileşenleri hariç tutar.
system/connectivity/wificond
bölgesindewificond
yerel bileşenwificond
arayüzü (android.net.wifi.nl80211
paketindeki sınıflar, ör.WifiNl80211Manager
)android.net.wifi.SoftApConfToXmlMigrationUtil
android.net.wifi.WifiNetworkScoreCache
android.net.wifi.WifiMigration
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_system_iface
Android 11'de dosyalar taşınmaz ancak gelecekteki sürümlerde bu özellik eklenebilir. Dosya konumu değişikliklerini taşımayla ilgili çabayı azaltmak için mümkün olduğunca fazla değişikliği AOSP'ye göndermenizi öneririz (Android 11'e taşındıktan veya özel uzantıları, resmi Android API'lerini kullanacak şekilde yeniden derlendikten sonra AOSP kodundan ayırmak için tedarikçi HAL uzantılarını kullanarak).
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 (
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
wificond
bouncycastle
ksoap2
libnanohttpd
Bu modül yalnızca kararlı @SystemApi
kullanarak (@hide
API kullanımı olmadan) ç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ında 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
config
ayarları etkinleştirin veya devre dışı bırakın. - Daha fazla kontrol için
@SystemAPI
olarak sunulan tüm operatör yapılandırma anahtarlarının yapılandırma değerlerini özelleştirin.
Çalışma zamanı kaynak yer paylaşımlarını kullan
RRO'ları kullanarak varsayılan yapılandırmaları geçersiz kılarak kablosuz modülü ö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ışı ayrıntıları için packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
başlıklı makaleyi inceleyin.
Örnek 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 ayarlar ve kablosuz modül tarafından sağlanan kaynak APK'nın paket adı com.google.android.wifi.resources
olduğundan, kablosuz yapılandırmaları başarılı bir şekilde yer paylaşımı yapmak için yer paylaşımı APK'larını targetPackage
olarak com.google.android.wifi.resources
ayarlamanız gerekir.
Yapılandırma depolama alanı biçimini taşıma
Kablosuz modülü yalnızca AOSP kablosuz yapılandırma depolama biçimini ayrıştırabilir. Daha önce kablosuz ağ yapılandırması depolama biçimini (kullanıcı tarafından kaydedilen ağ listesini içerir) değiştirdiyseniz bir cihazı kablosuz ağ modülü 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ürme işlemini aşağıdaki yöntemlerde uygulayın.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
AOSP biçimine dönüştürülmüş kablosuz paylaşılan mağaza dosya içeriklerini almak için kablosuz modülü tarafından çağrılır.
Bu dosyalar daha önce (Android 10'da) cihazdaki
/data/misc/wifi
klasöründe depolanıyordu.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
AOSP biçimine dönüştürülmüş, kablosuz bağlantıya özel kullanıcıya özgü 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>/wifi
klasöründe depolanıyordu.
Gizli Wi-Fi API'lerine erişme
Wi-Fi modülünde @hide
ile ek açıklamaya sahip simgeler (sınıflar, yöntemler, alanlar vb.) herkese açık API yüzeyinin bir parçası değildir ve modülün yüklü olduğu cihazlarda bunlara erişilemez. Kablosuz bağlantı modülünü içermeyen cihazlar, aşağıdaki adımları uygulayarak @hide
Wi-Fi API'lerini kullanmaya devam edebilir.
impl_library_visibility
özelliğini herkese açık olarak değiştirerekpackages/modules/Wifi/framework/Android.bp
tarihindeframework-wifi
için 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. ], ... }
Derleme kuralını, kitaplığa
@hide
Wi-Fi API'lerine erişim izni verecek şekilde değiştirin. Örneğin, aşağıdakiler birjava_library
için derleme kuralıdır.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
foo-lib
iç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
'ün,libs
listesindeframework
'ten ö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 ek açıklamaya sahip simgelere kablosuz modüldeki kod tarafından erişilemez. Kablosuz ağ modülü içermeyen cihazlar, frameworks/opt/net/wifi/service/Android.bp
'da aşağıdaki değişiklikleri yaparak service-wifi
'de @hide
harici API'leri (ör. framework.jar
'dan) kullanmaya devam edebilir.
wifi-service-pre-jarjar
veservice-wifi
'de hemsdk_version
özelliğinicore_platform
olarak değiştirin.wifi-service-pre-jarjar
veservice-wifi
'telibs
ö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
Android Compatibility Test Suite (CTS), her modül sürümünde kapsamlı bir CTS testi grubu çalıştırarak kablosuz ağ modülünün özelliklerini doğrular. Kablosuz ağları test etme, hata ayıklama ve ayarlama bölümünde açıklanan testleri de çalıştırabilirsiniz.