Moduł Wi-Fi można aktualizować, co oznacza, że może otrzymywać aktualizacje funkcji poza normalnym cyklem publikowania wersji Androida. Ten moduł zawiera te komponenty:
Rysunek 1. Komponenty i architektura modułu Wi-Fi
Moduł Wi-Fi ma następujące zalety.
Użytkownicy mają dostęp do spójnego Wi-Fi na różnych urządzeniach z Androidem, a poprzez aktualizacje modułów mogą rozwiązywać problemy z współpracą.
Deweloperzy aplikacji mają zmniejszoną fragmentację platformy
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 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 z:frameworks/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/
(nowość w Androidzie 11, konfiguracje Wi-Fi wyodrębnione z:frameworks/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 z nakładką 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 katalogu nowego projektu.
Przenieś poprawkę z platformy/platformy podstawowej/Wi-Fi
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
Przeniesienie poprawki z frameworks/opt/net/wifi
wymaga złożonych kroków, ponieważ hierarchia katalogów została zmieniona podczas migracji.
W frameworks/opt/net/wifi
podziel zatwierdzenie na 2 zatwierdzenia: jedno dla service/
, a drugie 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 po zatwierdzeniu
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 2 komitów 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ługi dla systemów
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
iWifiRttService
OsuLogin
ServiceWifiResources
Moduł wyklucza te komponenty, 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 być może w kolejnych wersjach. Aby ograniczyć wysiłek związany z przenoszeniem zmian lokalizacji plików, zalecamy przekazywanie jak największej liczby zmian w AOSP (po przeniesieniu ich na Androida 11 lub refaktoryzacji zastrzeżonych rozszerzeń w celu użycia oficjalnych interfejsów API Androida lub rozszerzeń HAL dostawców w celu odłączenia ich 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
poniższe komponenty.
- Biblioteka pakietu SDK (
framework-wifi.jar
) - Biblioteka usługi (
service-wifi.jar
) - Plik APK OsuLogin (
OsuLoginGoogle.apk
) - Plik APK zasobu (
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. Dostosowanie modułu Wi-Fi
- Aby wprowadzić drobne zmiany, włącz lub wyłącz ustawienia w menu
config
. - Aby mieć 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 pamięci konfiguracji Wi-Fi został wcześniej zmodyfikowany (w tym lista zapisanych sieci użytkownika), przed aktualizacją urządzenia do dowolnej wersji Androida zawierającej moduł Wi-Fi musisz przekonwertować te dane na format AOSP. Elementy wywołujące potrzebne do wykonania 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ólnego 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ływana przez moduł Wi-Fi w celu pobrania zawartości pliku magazynu dla określonego użytkownika Wi-Fi, która została przekonwertowana na format AOSP.
Te pliki były wcześniej (w Androidzie 10) 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
na stroniepackages/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ć usłudze
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 platformy
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 zarówno
wifi-service-pre-jarjar
, jak 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 Android Compatibility Test Suite (CTS) sprawdza możliwości modułu Wi-Fi, przeprowadzając kompleksowy zestaw testów CTS każdej jego wersji. Możesz też przeprowadzić testy opisane w artykule Testowanie, debugowanie i optymalizowanie Wi-Fi.