Moduł Wi-Fi można aktualizować, co oznacza, że może on otrzymywać aktualizacje funkcji niezależnie od normalnego cyklu wydawania Androida. Moduł ten zawiera te komponenty:
Rysunek 1. Komponenty i architektura modułu Wi-Fi
Moduł Wi-Fi zapewnia te korzyści:
Użytkownicy mają spójne działanie Wi-Fi na urządzeniach z Androidem, a aktualizacje modułów rozwiązują problemy z interoperacyjnością.
Deweloperzy aplikacji mogą ograniczyć fragmentację platformy.
Producenci OEM mogą spełniać wymagania operatorów, a jednocześnie obniżać koszty indywidualnych dostosowań (ponieważ nie potrzebują różnych implementacji tych samych wymagań na różne sposoby).
Granica modułu w Androidzie 12 i 13
packages/modules/Wififrameworkjava/android/net/wifi(pliki zframeworks/base/wifi/java)
tests/android/net/wifi(pliki zframeworks/base/wifi/tests)
aidl-export/api/Android.bp
service/java/com/android/server/wifi(pliki zframeworks/opt/net/wifi/service/java)
tests/com/android/server/wifi(pliki zframeworks/opt/net/wifi/tests)
proto/Android.bpproguard.flagswifi.rc
OsuLogin/(pliki zframeworks/base/packages/OsuLogin)ServiceResources/(nowość w Androidzie 12, tutaj jest przechowywany manifest pliku APK nakładki)res/(nowość w Androidzie 11, konfiguracje Wi-Fi wyodrębnione zframeworks/base/core/res/res)AndroidManifest.xmlAndroid.bp
WifiDialog/(nowość w Androidzie 13. Aplikacja do uruchamiania okien dialogowych użytkownika, o które prosi usługa, jest przechowywana tutaj).src/com/android/wifi/dialog(Zawiera aktywność, z której uruchamiane są okna)
AndroidManifest.xmlAndroid.bp
W poprzednich katalogach znajdują się też kody, które pozostają poza modułowym komponentem systemu i w swojej obecnej lokalizacji, np.:
wificond interface(klasy w pakiecieandroid.net.wifi.nl80211, np.WifiNl80211Manager)- Przykładowa aplikacja nakładki zasobów
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Producenci OEM mogą używać przykładowych poleceń, aby przenieść poprawki z oryginalnych katalogów projektów do nowego katalogu projektu.
Przenoszenie poprawki z katalogu frameworks/base/wifi
Generowanie pliku poprawki w katalogu root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txtStosowanie pliku z poprawką do katalogu root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txtPrzenoszenie poprawki z folderu frameworks/opt/net/wifi
Przeniesienie poprawki z frameworks/opt/net/wifi wymaga skomplikowanych działań, ponieważ podczas migracji zmieniono hierarchię katalogów.
W frameworks/opt/net/wifi podziel zatwierdzenie na 2 zatwierdzenia: jedno dla service/ i jedno dla tests/.
Migracja zatwierdzenia HEAD
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
Generowanie 2 plików poprawek do zatwierdzenia
git format-patch -1 service-commit --stdout > service-patch.txtgit format-patch -1 test-commit --stdout > test-patch.txt
Stosowanie dwóch poprawek do pakietów/modułów/Wifi
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
Scalanie dwóch commitów w jeden
git rebase -iZmień operację drugiego zatwierdzenia na squash.
W razie potrzeby zmień wiadomość o zatwierdzeniu.
Granica modułu w Androidzie 11
Usługa Wi-Fi nadal działa w ramach procesu usługi systemowej. Moduł Wi-Fi
zawiera cały kod w packages/modules/Wifi, w tym:
- Pakiety SDK i klasy usług dla
WifiService,WifiP2pService,WifiAwareService,WifiScannerServiceiWifiRttService OsuLoginServiceWifiResources
Moduł nie obejmuje tych komponentów, które pozostają częścią kompilacji AOSP producenta OEM.
wificondkomponent natywny w:system/connectivity/wificondwificondinterfejs (klasy w pakiecieandroid.net.wifi.nl80211, np.WifiNl80211Manager);android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Android 11 nie przenosi plików, ale w przyszłych wersjach może się to zmienić. Aby zmniejszyć nakład pracy związany z przenoszeniem zmian w lokalizacji plików, zalecamy przekazywanie jak największej liczby zmian do AOSP (po przeniesieniu ich do Androida 11 lub po refaktoryzacji zastrzeżonych rozszerzeń w celu używania formalnych interfejsów API Androida lub rozszerzeń HAL dostawcy, aby oddzielić je od kodu AOSP).
Format modułu
Moduł Wi-Fi (com.android.wifi) jest w formacie APEX i jest dostępny na urządzeniach z Androidem 11 lub nowszym. Plik APEX zawiera te komponenty:
- Biblioteka pakietu SDK (
framework-wifi.jar) - Biblioteka usług (
service-wifi.jar) - Plik APK OsuLogin (
OsuLoginGoogle.apk) - Pakiet APK zasobów (
ServiceWifiResourcesGoogle.apk) - Certyfikaty WFA
Zależności modułów
Moduł Wi-Fi zależy od tych komponentów:
- Łączność
- Połączenia telefoniczne
- Biblioteki proto
- Różne komponenty systemu
- Warstwy HAL Wi-Fi
wificondbouncycastleksoap2libnanohttpd
Ten moduł wchodzi w interakcję z platformą tylko za pomocą stabilnych interfejsów @SystemApi (nie korzysta z interfejsów @hide API) i jest podpisany podpisem Google, a nie podpisem platformy.
Dostosowywanie
Moduł Wi-Fi nie obsługuje bezpośredniego dostosowywania, ale możesz dostosować konfigurację za pomocą nakładek zasobów w czasie działania lub konfiguracji operatora.
Rysunek 2. Dostosowywanie modułu Wi-Fi
- W przypadku drobnych zmian włącz lub wyłącz ustawienia w RRO
config. - Aby mieć większą kontrolę, dostosuj wartości konfiguracji dla dowolnego klucza konfiguracji operatora, który jest widoczny jako
@SystemAPI.
Używanie nakładek zasobów środowiska wykonawczego
Moduł Wi-Fi możesz dostosować, zastępując konfiguracje domyślne za pomocą nakładek RRO. Listę konfiguracji, które można nakładać, znajdziesz w sekcji
packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml.
Szczegółowe informacje o zachowaniu konfiguracji znajdziesz w sekcji
packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml.
Przykładową aplikację nakładkową znajdziesz w sekcji device/google/coral/rro_overlays/WifiOverlay/.
Ponieważ plik device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml ustawia atrybut targetPackage na com.android.wifi.resources, a plik APK zasobu dostarczany przez moduł Wi-Fi ma nazwę pakietu com.google.android.wifi.resources, musisz ustawić nakładkę APKS targetPackage na com.google.android.wifi.resources, aby prawidłowo nałożyć konfiguracje Wi-Fi.
Migracja formatu miejsca na dane konfiguracji
Moduł Wi-Fi może analizować tylko format pamięci konfiguracji Wi-Fi AOSP. Jeśli
wcześniej zmodyfikowano format przechowywania konfiguracji Wi-Fi (który
obejmuje listę zapisanych sieci użytkownika), podczas uaktualniania urządzenia do dowolnej wersji Androida, która zawiera moduł Wi-Fi, musisz przekonwertować te dane do formatu AOSP. Haczyki potrzebne do tej konwersji znajdują się w klasie android.net.wifi.WifiMigration.
Wdróż konwersję formatu za pomocą tych metod.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)Wywoływany przez moduł Wi-Fi w celu pobrania zawartości pliku magazynu udostępnionego Wi-Fi, która została przekonwertowana do formatu AOSP.
Wcześniej (w Androidzie 10) te pliki były przechowywane w folderze
/data/misc/wifina urządzeniu.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)Wywoływana przez moduł Wi-Fi w celu pobrania zawartości pliku sklepu specyficznego dla użytkownika Wi-Fi, która została przekonwertowana na format AOSP.
Wcześniej (w Androidzie 10) te pliki były przechowywane w folderze
/data/misc_ce/<userId>/wifina urządzeniu.
Dostęp do ukrytych interfejsów API Wi-Fi
Symbole (klasy, metody, pola itp.) oznaczone w module Wi-Fi adnotacją @hide nie są częścią jego publicznego interfejsu API i nie można do nich uzyskać dostępu na urządzeniach z zainstalowanym modułem. Urządzenia, które nie mają modułu Wi-Fi, mogą nadal korzystać z interfejsów @hide Wi-Fi API, wykonując te czynności.
Usuń ograniczenia widoczności nałożone na
framework-wifiwpackages/modules/Wifi/framework/Android.bp, zmieniając atrybutimpl_library_visibilityna publiczny.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }Zmień regułę kompilacji, aby zezwolić na dostęp do biblioteki
@hideinterfejsów API Wi-Fi. Na przykład poniżej znajduje się reguła kompilacji dlajava_library.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }Aby zezwolić na dostęp do biblioteki w przypadku
foo-lib, zmień regułę kompilacji w ten sposób:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }Sprawdź, czy
framework-wifi.implznajduje się przedframeworkna liścielibs. Kolejność zależności w atrybucielibsma znaczenie.
Dostęp do ukrytych interfejsów API platformy
Do symboli oznaczonych symbolem @hide poza modułem Wi-Fi nie można uzyskać dostępu za pomocą kodu w module Wi-Fi. Urządzenia, które nie mają modułu Wi-Fi, mogą nadal korzystać z @hide zewnętrznych interfejsów API (np. z framework.jar) w service-wifi, wprowadzając te zmiany w frameworks/opt/net/wifi/service/Android.bp.
W obu przypadkach
wifi-service-pre-jarjariservice-wifizmień atrybutsdk_versionnacore_platform.W obu
wifi-service-pre-jarjariservice-wifidodajframeworkiandroid_system_server_stubs_currentdo atrybutulibs.Sprawdź, czy wynik jest podobny do tego w przykładowym kodzie poniżej.
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", ], }
Testowanie
Pakiet testów zgodności z Androidem (CTS) weryfikuje możliwości modułu Wi-Fi, przeprowadzając kompleksowy zestaw testów CTS na każdej wersji modułu. Możesz też przeprowadzić testy opisane w sekcji Testowanie, debugowanie i dostrajanie sieci Wi-Fi.