Moduł Wi-Fi można aktualizować, co oznacza, że można aktualizować jego możliwości poza normalnym cyklem aktualizacji Androida. Ten moduł zawiera te komponenty:
Rysunek 1. Komponenty i architektura modułu Wi-Fi
Moduł Wi-Fi zapewnia te korzyści:
Użytkownicy mają zapewnioną spójną obsługę Wi-Fi na urządzeniach z Androidem, a poprzez aktualizacje modułów rozwiązywane są problemy z współpracą.
Deweloperzy aplikacji mogą zmniejszyć fragmentaryzację platform.
Producenci OEM mogą spełniać wymagania operatorów, a także obniżać koszty związane z indywidualnym dostosowywaniem (ponieważ nie muszą stosować różnych implementacji tych samych wymagań na różne sposoby).
Granica modułu na 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 plik manifestu APK)res/
(nowe w Androidzie 11, konfiguracje Wi-Fi wyodrębnione zframeworks/base/core/res/res
)AndroidManifest.xml
Android.bp
WifiDialog/
(nowość w Androidzie 13 – tutaj są przechowywane dane dotyczące inicjowania przez usługę dialogów z użytkownikiem)src/
com/android/wifi/dialog
(zawiera aktywność, z której uruchamiane są okna dialogowe)
AndroidManifest.xml
Android.bp
Powyższe katalogi zawierają też kod, który pozostaje poza modułowym składnikiem systemu i znajduje się w jego bieżącej lokalizacji, na przykład:
wificond interface
(np. klasy w pakiecieandroid.net.wifi.nl80211
,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ść swoje poprawki z katalogów pierwotnych 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 poprawki w folderze root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Przenoszenie poprawki z frameworks/opt/net/wifi
Aby przenieść poprawkę z frameworks/opt/net/wifi
, musisz wykonać skomplikowane czynności, ponieważ hierarchia katalogów została zmieniona podczas migracji.
W frameworks/opt/net/wifi
podziel commit na 2 commity: jeden dla service/
i jeden 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 dwóch plików poprawek powiązanych z zatwierdzeniami
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Stosowanie dwóch poprawek w pakietach, modułach i Wi-Fi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Skrócenie dwóch zatwierdzeń do jednego
git rebase -i
Zmień operację drugiego zatwierdzenia na squash
.
W razie potrzeby zmień wiadomość zatwierdzania.
Granica modułu w Androidzie 11
Usługa Wi-Fi nadal działa w ramach procesu System Service. Moduł Wi-Fi zawiera cały kod z packages/modules/Wifi
, w tym:
- Pakiet 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 OEM:
- Komponent natywny
wificond
wsystem/connectivity/wificond
- interfejs
wificond
(klasy w pakiecieandroid.net.wifi.nl80211
, na przykładWifiNl80211Manager
) 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 może to nastąpić w przyszłych wersjach. Aby zmniejszyć nakład pracy związany z przenoszeniem zmian lokalizacji plików, zalecamy przesyłanie do AOSP jak największej liczby zmian (po przeportowaniu ich do Androida 11 lub przefaktoryzowaniu zastrzeżonych rozszerzeń w celu użycia oficjalnych interfejsów API Androida lub rozszerzeń HAL producenta, aby odseparować 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ługi (
service-wifi.jar
) - Plik APK OsuLogin (
OsuLoginGoogle.apk
) - Zasób APK (
ServiceWifiResourcesGoogle.apk
) - certyfikaty WFA,
Zależności modułu
Moduł Wi-Fi zależy od tych komponentów.
- Łączność
- Połączenia telefoniczne
- Biblioteki prototypowe
- Inne komponenty systemu
- Interfejsy HAL Wi-Fi
wificond
bouncycastle
ksoap2
libnanohttpd
Ten moduł współpracuje z ramami wyłącznie przy użyciu stabilnego interfejsu @SystemApi
(bez używania interfejsu @hide
) i jest podpisany podpisem Google zamiast podpisu platformy.
Dostosowywanie
Moduł Wi-Fi nie obsługuje bezpośredniego dostosowywania, ale możesz dostosować konfigurację za pomocą nakładek zasobów w czasie wykonywania (RRO) lub konfiguracji operatora.
Rysunek 2. Dostosowywanie modułu Wi-Fi
- Aby wprowadzić drobne zmiany, włącz lub wyłącz ustawienia w menu
config
. - Aby uzyskać większą kontrolę, dostosuj wartości konfiguracji dla dowolnego klucza konfiguracji operatora, który jest udostępniany jako
@SystemAPI
.
Używanie nakładek zasobów środowiska wykonawczego
Moduł Wi-Fi możesz dostosować, zastępując domyślne konfiguracje za pomocą 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 artykule packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
.
Przykładową aplikację nakładową znajdziesz w artykule device/google/coral/rro_overlays/WifiOverlay/
.
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
. Aby nakładać konfiguracje Wi-Fi, musisz ustawić wartości atrybutów targetPackage
w pliku APK nakładki na com.google.android.wifi.resources
.
Migracja formatu miejsca na dane konfiguracji
Moduł Wi-Fi może analizować tylko format pamięci konfiguracji Wi-Fi AOSP. Jeśli format przechowywania konfiguracji Wi-Fi (który zawiera zapisaną listę sieci użytkownika) został wcześniej zmodyfikowany, podczas uaktualniania urządzenia do dowolnej wersji Androida zawierającej moduł Wi-Fi musisz przekonwertować te dane do formatu AOSP. Elementy wywołujące potrzebne do tej konwersji znajdują się w klasie android.net.wifi.WifiMigration
.
Konwersję formatu można zaimplementować na 2 sposoby:
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
Wywoływany przez moduł Wi-Fi w celu pobrania treści pliku z współdzielonego magazynu Wi-Fi, który został przekonwertowany 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ływany przez moduł Wi-Fi w celu pobrania treści pliku sklepu związanego z użytkownikiem Wi-Fi, który został przekonwertowany do formatu AOSP.
Wcześniej (w Androidzie 10) pliki te 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.) opatrzone adnotacją @hide
w module Wi-Fi nie są częścią publicznego interfejsu API i nie można ich używać na urządzeniach z zainstalowanym modułem. Urządzenia, które nie mają modułu Wi-Fi, mogą nadal korzystać z interfejsów API Wi-Fi @hide
, wykonując te czynności.
Usuń ograniczenia widoczności zastosowane do
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. Poniżej znajdziesz przykład reguły kompilacji dlajava_library
.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
Aby zezwolić
foo-lib
na dostęp do biblioteki, zmień regułę kompilacji w ten sposób:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Upewnij się, że na liście
libs
elementframework-wifi.impl
znajduje się przed elementemframework
. Kolejność zależności w atrybucielibs
ma znaczenie.
Dostęp do ukrytych interfejsów API framework
Kod w module Wi-Fi nie ma dostępu do symboli oznaczonych @hide
poza modułem 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 atrybutach
wifi-service-pre-jarjar
iservice-wifi
zmień atrybutsdk_version
nacore_platform
.Do atrybutu
libs
w obu tagachwifi-service-pre-jarjar
iservice-wifi
dodaj wartościframework
iandroid_system_server_stubs_current
.Sprawdź, czy wynik jest podobny do tego przykładowego kodu.
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 (Compatibility Test Suite, 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 artykule Testowanie, debugowanie i optymalizowanie Wi-Fi.