Wi-Fi modülü güncellenebilir, yani özelliklerle ilgili güncellemeleri alabilir sayısını artırır. Bu modül şunları içerir: bileşenlerine ayıralım.
Şekil 1. Kablosuz bağlantı modülü bileşenleri ve mimarisi
Kablosuz bağlantı modülü aşağıdaki avantajları sağlar.
Son kullanıcılar, Android cihazlar genelinde tutarlı bir kablosuz ağ deneyimi yaşayıp bunları düzeltir. .
Uygulama geliştiriciler daha az platform parçalılığı elde eder.
OEM'ler taşıyıcı gereksinimlerini karşılayabilir, aynı zamanda için ayrı ayrı özelleştirmeler (çünkü ve aynı koşullar arasında farklı şekillerde).
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
(dosyalar:frameworks/opt/net/wifi/service/java
)
tests/
com/android/server/wifi
(dosyalar:frameworks/opt/net/wifi/tests
)
proto/
Android.bp
proguard.flags
wifi.rc
OsuLogin/
(frameworks/base/packages/OsuLogin
dosyaları)ServiceResources/
(Android 12'de yeni, Yer Paylaşımlı APK manifesti burada depolanır)res/
(Android 11'de yeni, kablosuz yapılandırmalarda) şuradan alındı:frameworks/base/core/res/res
)AndroidManifest.xml
Android.bp
WifiDialog/
(Android 13 uygulamasında yeni hizmet tarafından istenen kullanıcı başlatma iletişim kutuları burada saklanır.)src/
com/android/wifi/dialog
(İletişim kutularının bulunduğu Etkinliği içerir başlatılmıştır)
AndroidManifest.xml
Android.bp
Önceki dizinler Ayrıca, modüler sistem bileşeninin dışında ve onun kendisinde bulunan geçerli konumunuz, örneğin:
wificond interface
(android.net.wifi.nl80211
paketindeki sınıflar, örnek,WifiNl80211Manager
)- Örnek Resource Overlay uygulaması
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_system_iface
OEM'ler, yamalarını taşımak için örnek komutları kullanabilir yeni proje dizinine taşıyın.
Çerçevelerden/ana/kablosuz bağlantıdan yama taşıma
Yama dosyasını root/frameworks/base/wifi konumunda oluşturma
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
Çerçevelerden/opt/net/wifi adresinden yama taşıma
Yamayı frameworks/opt/net/wifi
kaynağından taşımak için karmaşık adımlar gerekiyor
çünkü taşıma sırasında dizin hiyerarşisi değiştiğinden.
frameworks/opt/net/wifi
uygulamasında kaydı, biri birer tane için olmak üzere iki kayda bölün
service/
ve biri tests/
için.
HEAD kaydı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/Wifi'ye uygulama
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
İki kaydı tekrar tek bir kayda geçirmek
git rebase -i
İkinci kaydetmenin işlemini squash
olarak değiştirin.
Kaydetme mesajını uygun şekilde düzenleyin.
Android 11 için modül sınırı
Kablosuz hizmeti, Sistem Hizmeti işleminin içinde çalışmaya devam eder. Kablosuz ağ
modülü, aşağıdakiler de dahil olmak üzere packages/modules/Wifi
ürünündeki tüm kodları içerir.
WifiService
,WifiP2pService
veWifiAwareService
,WifiScannerService
veWifiRttService
OsuLogin
ServiceWifiResources
Modül, OEM'in şu bileşenlerine dahil değildir: AOSP derlemesi.
system/connectivity/wificond
bölgesindewificond
yerel bileşenwificond
arayüzü (android.net.wifi.nl80211
paketindeki sınıflar, örnek,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 kullanıma sunulacak sürümleri taşımaz olabilir. Dosya konumu değişikliklerini taşımayla ilgili çabayı azaltmak için AOSP'ye mümkün olduğunca fazla değişiklik öner (bunları Android 11 veya özel uzantıların yeniden düzenlenmesi resmi Android API'leri veya tedarikçi HAL uzantıları kullanarak bunların AOSP kodundan uzaklaşmasını sağlayın.
Modül biçimi
Kablosuz bağlantı modülü (com.android.wifi
) şurada:
APEX biçimindedir ve cihazlarda kullanılabilir
Android 11 veya sonraki sürümleri çalıştıran. APEX dosyasında şunlar yer alır:
aşağıdaki bileşenlerde kullanılabilir.
- 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 bağlantı 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
(hiçbiri
@hide
API kullanımı) ve platform yerine Google imzası ile imzalanır.
imzası var.
Özelleştirme
Kablosuz bağlantı modülü doğrudan özelleştirmeyi desteklemez, ancak çalışma zamanı kaynak yer paylaşımlarını kullanarak yapılandırma (RRO'lar) veya operatör yapılandırmaları.
Şekil 2. Kablosuz bağlantı modülü özelleştirme
- Küçük özelleştirmeler için RRO
config
'daki ayarları etkinleştirin veya devre dışı bırakın. - Daha fazla kontrol için herhangi bir operatör yapılandırma anahtarının yapılandırma değerlerini özelleştirin
@SystemAPI
olarak gösterildi.
Çalışma zamanı kaynak yer paylaşımlarını kullan
Varsayılan yapılandırmaları geçersiz kılarak Wi-Fi modülünü özelleştirebilirsiniz
nasıl yardımcı olacağını
daha iyi anlarsınız. Yer paylaşımlı yapılandırmaların listesi için
packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
Yapılandırma davranışıyla ilgili ayrıntılar için
packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
Örnek bir bindirme uygulaması için
device/google/coral/rro_overlays/WifiOverlay/
Çünkü device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
dosyası, targetPackage
özelliğini com.android.wifi.resources
ve
Wi-Fi modülü tarafından yayınlanan kaynak APK'sının paket adı var
com.google.android.wifi.resources
, yer paylaşımlı APK'ları ayarlamanız gerekir
Kablosuz ağ yer paylaşımı için targetPackage
- com.google.android.wifi.resources
yapılandırma başarıyla tamamlandı.
Yapılandırma depolama alanı biçimini taşı
Kablosuz bağlantı modülü yalnızca AOSP kablosuz ağ yapılandırma depolama alanı biçimini ayrıştırabilir. Eğer
Kablosuz yapılandırmasının depolama biçimini daha önce
kullanıcının kayıtlı ağ listesini içeriyorsa) bu verileri AOSP'ye dönüştürmeniz gerekir.
biçimi
modülünü kullanabilirsiniz. Bu dönüşüm için gereken kancalar
android.net.wifi.WifiMigration
sınıf.
Biçim dönüştürme işlemini aşağıdaki yöntemlerle uygulayın.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
Kablosuz paylaşılan mağaza dosya içeriklerini almak için Wi-Fi modülü tarafından çağrıldı AOSP biçimine dönüştürülmüştür.
Bu dosyalar daha önce (Android 10'da)
/data/misc/wifi
bölümünde depolanıyordu adlı bir klasör içerir.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Kablosuz ağ kullanıcısına özel mağaza dosya içeriklerini almak için Wi-Fi modülü tarafından çağrıldı AOSP biçimine dönüştürülmüştür.
Bu dosyalar daha önce (Android 10'da) şurada depolanıyordu: Cihazda
/data/misc_ce/<userId>/wifi
klasörü.
Gizli Wi-Fi API'lerine erişme
Kablosuz ağda @hide
ile açıklama eklenen semboller (sınıflar, yöntemler, alanlar vb.)
modülü, genel API yüzeyinin bir parçası değildir ve
cihazlarınızın hepsine Google'dan erişebileceksiniz. Kablosuz ağ bağlantısı olmayan cihazlar
modülü aşağıdaki adımları uygulayarak @hide
Wi-Fi API'lerini kullanmaya devam edebilir.
framework-wifi
tarihinde uygulanan görünürlük kısıtlamalarını şu saatte kaldırın:packages/modules/Wifi/framework/Android.bp
impl_library_visibility
özelliği herkese açık olarak ayarlandı.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Derleme kuralını, kitaplık erişimine
@hide
Wi-Fi API'lerine izin verecek şekilde değiştirin. Örneğin, Örneğin, aşağıda birjava_library
derleme kuralı gösterilmektedir.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
foo-lib
için kitaplık erişimine izin vermek istiyorsanız 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 listedeframework
öğesinden önce göründüğünden emin olun /libs
.libs
özelliğindeki bağımlılıkların sırası önemlidir.
Gizli çerçeve API'lerine erişme
Kablosuz bağlantı modülünün dışında, ek açıklaması olan @hide
sembollerine
Wi-Fi modülünde yer alır. Wi-Fi modülünü içermeyen cihazlar
şurada @hide
harici API'yi (ör. framework.jar
API'leri) kullanmaya devam edin:
service-wifi
frameworks/opt/net/wifi/service/Android.bp
.
wifi-service-pre-jarjar
veservice-wifi
içinde,core_platform
ilesdk_version
özelliği.wifi-service-pre-jarjar
veservice-wifi
ikisineframework
ekleyinlibs
özelliğineandroid_system_server_stubs_current
ve.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), kablosuz ağ modülünün her modülde kapsamlı bir dizi CTS testi çalıştırarak kullanabilirsiniz. Ayrıca, Test etme, hata ayıklama ve ayarlama Kablosuz bağlantı.