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/Wifi
framework
java/
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.bp
proguard.flags
wifi.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.xml
Android.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.xml
Android.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
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_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.txt
Stosowanie pliku z poprawką do katalogu root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Przenoszenie 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-commit
git 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.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Stosowanie dwóch poprawek do pakietów/modułów/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Scalanie dwóch commitów w jeden
git rebase -i
Zmień 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
,WifiScannerService
iWifiRttService
OsuLogin
ServiceWifiResources
Moduł nie obejmuje tych komponentów, które pozostają częścią kompilacji AOSP producenta OEM.
wificond
komponent natywny w:system/connectivity/wificond
wificond
interfejs (klasy w pakiecieandroid.net.wifi.nl80211
, np.WifiNl80211Manager
);android.net.wifi.SoftApConfToXmlMigrationUtil
android.net.wifi.WifiNetworkScoreCache
android.net.wifi.WifiMigration
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_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
wificond
bouncycastle
ksoap2
libnanohttpd
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/wifi
na 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>/wifi
na 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-wifi
wpackages/modules/Wifi/framework/Android.bp
, zmieniając atrybutimpl_library_visibility
na 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
@hide
interfejsó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.impl
znajduje się przedframework
na liścielibs
. Kolejność zależności w atrybucielibs
ma 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-jarjar
iservice-wifi
zmień atrybutsdk_version
nacore_platform
.W obu
wifi-service-pre-jarjar
iservice-wifi
dodajframework
iandroid_system_server_stubs_current
do 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.