Kablosuz modül güncellenebilirdir. Yani normal Android sürüm döngüsü dışında özelliklerle ilgili güncellemeler alabilir. Bu modül aşağıdaki bileşenleri içerir.
Şekil 1. Kablosuz 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
tarafından paylaşılan 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 Kaynak Yer Paylaşımı 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
'te, bir service/
ve bir tests/
olmak üzere iki commit olacak şekilde commit'i ikiye 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 commit yaması 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. Kablosuz 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
'dakiwificond
yerel bileşeniwificond
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 yapılandırdıktan sonra AOSP kodundan ayırmak için tedarikçi HAL uzantılarını kullanın).
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 çerçeveyle etkileşim kurar (@hide
API'si kullanılmaz) ve platform imzası yerine Google imzası ile 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 ayarları etkinleştirin veya devre dışı bırakın
config
. - 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ında kaynak yer paylaşımlarını kullanma
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
Wi-Fi 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 depolama alanı 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çıklama yapılan semboller (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 modülü içermeyen cihazlar, aşağıdaki adımları uygulayarak @hide
kablosuz API'lerini kullanmaya devam edebilir.
impl_library_visibility
özelliğini herkese açık olarak değiştirerekpackages/modules/Wifi/framework/Android.bp
tarihindeframework-wifi
üzerinde 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.