Moduł Wi-Fi można aktualizować, co oznacza, że może otrzymywać aktualizacje funkcji poza normalnym cyklem wydawniczym Androida. Ten moduł zawiera następujące komponenty.
Rysunek 1. Elementy i architektura modułu Wi-Fi
Moduł Wi-Fi zapewnia następujące korzyści.
Użytkownicy końcowi uzyskują spójną jakość Wi-Fi na wszystkich urządzeniach z systemem Android oraz poprawki problemów z interoperacyjnością dzięki aktualizacjom modułów.
Deweloperzy aplikacji uzyskują mniejszą fragmentację platformy.
Producenci OEM mogą spełnić wymagania przewoźników, jednocześnie zmniejszając koszty indywidualnych dostosowań (ponieważ nie potrzebują różnych implementacji tych samych wymagań na różne sposoby).
Granica modułu dla Androida 12 i Androida 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 przechowywany jest manifest Overlay APK)-
res/
(nowość w Androidzie 11, konfiguracje Wi-Fi wyodrębnione zframeworks/base/core/res/res
) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(nowość w aplikacji Android 13 do uruchamiania okien dialogowych użytkownika żądanych przez usługę jest przechowywana tutaj).-
src/
-
com/android/wifi/dialog
(zawiera działanie, z którego uruchamiane są okna dialogowe)
-
-
AndroidManifest.xml
-
Android.bp
-
-
Powyższe katalogi zawierają również kod, który pozostaje poza komponentem systemu modułowego iw swojej bieżącej lokalizacji, np.:
-
wificond interface
(klasy w pakiecieandroid.net.wifi.nl80211
, na przykładWifiNl80211Manager
) - Przykładowa aplikacja do nakładania zasobów
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
Producenci OEM mogą korzystać z przykładowych poleceń, aby ułatwić sobie przenoszenie poprawek z oryginalnych katalogów projektu do nowego katalogu projektu.
Przenoszenie łatki z frameworków/base/wifi
Generowanie pliku poprawki w katalogu głównym/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Stosowanie pliku łaty do katalogu głównego/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Przenoszenie poprawki z frameworks/opt/net/wifi
Aby przenieść łatkę z frameworks/opt/net/wifi
, potrzebne są złożone kroki, ponieważ hierarchia katalogów została zmieniona podczas migracji.
W frameworks/opt/net/wifi
podziel zatwierdzenie na dwa 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 dwóch plików poprawek zatwierdzenia
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Zastosowanie dwóch poprawek do pakietów/modułów/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Zgniecenie dwóch zatwierdzeń z powrotem w jedno zatwierdzenie
git rebase -i
Zmień operację drugiego zatwierdzenia na squash
.
Odpowiednio zmodyfikuj komunikat zatwierdzenia.
Granica modułu dla Androida 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 następujące.
- SDK i klasy usług dla
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
iWifiRttService
-
OsuLogin
-
ServiceWifiResources
Moduł nie obejmuje następujących komponentów, które pozostają częścią kompilacji AOSP producenta OEM.
- natywny komponent
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 przyszłe wersje mogą. Aby zmniejszyć wysiłek związany z przenoszeniem zmian lokalizacji plików, zalecamy jak najwięcej zmian w AOSP (po przeniesieniu ich do Androida 11 lub refaktoryzacji zastrzeżonych rozszerzeń w celu użycia formalnych interfejsów API Androida lub rozszerzeń HAL dostawcy w celu oddzielenia ich od kodu AOSP.
Format modułu
Moduł Wi-Fi ( com.android.wifi
) jest w formacie APEX i jest dostępny dla urządzeń z systemem Android 11 lub nowszym. Plik APEX zawiera następujące składniki.
- Biblioteka SDK (
framework-wifi.jar
) - Biblioteka usług (
service-wifi.jar
) - OsuLogin APK (
OsuLoginGoogle.apk
) - Plik APK zasobu (
ServiceWifiResourcesGoogle.apk
) - Certyfikaty WFA
Zależności modułów
Moduł Wi-Fi zależy od następujących komponentów.
- Łączność
- Telefonia
- Biblioteki proto
- Różne elementy systemu
- Wi-Fi HAL
-
wificond
-
bouncycastle
-
ksoap2
-
libnanohttpd
Ten moduł współdziała z frameworkiem, używając tylko stabilnego @SystemApi
(bez użycia @hide
API) i jest podpisany podpisem Google zamiast podpisu platformy.
Dostosowywanie
Moduł Wi-Fi nie obsługuje bezpośredniego dostosowywania, ale można dostosować konfigurację za pomocą nakładek zasobów w czasie wykonywania (RRO) lub konfiguracji operatora.
Rysunek 2. Personalizacja modułu Wi-Fi
- W przypadku drobnych dostosowań włącz lub wyłącz ustawienia w
config
RRO . - Aby uzyskać większą kontrolę, dostosuj wartości konfiguracyjne dla dowolnego klucza konfiguracji przewoźnika, który jest widoczny jako
@SystemAPI
.
Korzystanie z nakładek zasobów środowiska wykonawczego
Możesz dostosować moduł Wi-Fi, zastępując domyślne konfiguracje za pomocą RRO. Aby uzyskać listę konfiguracji, które można nakładać, zapoznaj się z packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
. Aby uzyskać szczegółowe informacje dotyczące zachowania konfiguracji, zapoznaj się z packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
. Przykładową aplikację nakładki znajdziesz na 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 zasób APK dostarczony 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 pomyślnie nałożyć konfiguracje Wi-Fi.
Migracja formatu przechowywania konfiguracji
Moduł Wi-Fi może analizować tylko format przechowywania konfiguracji Wi-Fi AOSP. Jeśli wcześniej zmodyfikowałeś format przechowywania konfiguracji Wi-Fi (który obejmuje zapisaną listę sieci użytkownika), musisz przekonwertować te dane na format AOSP podczas uaktualniania urządzenia do dowolnej wersji Androida, która zawiera moduł Wi-Fi. Haczyki potrzebne do tej konwersji znajdują się w klasie android.net.wifi.WifiMigration
.
Zaimplementuj konwersję formatu w następujących metodach.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
Wywoływany przez moduł Wi-Fi w celu pobrania zawartości udostępnionego pliku magazynu Wi-Fi, który został przekonwertowany na format AOSP.
Te pliki były wcześniej (w systemie Android 10) przechowywane w folderze
/data/misc/wifi
na urządzeniu.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Wywoływany przez moduł Wi-Fi w celu pobrania zawartości pliku magazynu specyficznego dla użytkownika Wi-Fi, który został przekonwertowany na format AOSP.
Te pliki były wcześniej (w systemie Android 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ą jego publicznej powierzchni API i nie można uzyskać do nich dostępu na urządzeniach z zainstalowanym modułem. Urządzenia, które nie zawierają modułu Wi-Fi, mogą nadal korzystać z interfejsów API Wi-Fi @hide
, wykonując poniższe czynności.
Usuń ograniczenia widoczności nałożone na
framework-wifi
wpackages/modules/Wifi/framework/Android.bp
, zmieniając atrybutimpl_library_visibility
na public.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 bibliotek
@hide
Wi-Fi API. Na przykład poniżej przedstawiono regułę kompilacji dlajava_library
.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
Aby zezwolić na dostęp do biblioteki dla
foo-lib
, zmień regułę kompilacji, jak pokazano poniżej.java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Upewnij się, że
framework-wifi.impl
pojawia się przedframework
na liścielibs
. Kolejność zależności w atrybucielibs
jest znacząca.
Dostęp do ukrytych interfejsów API frameworka
Symboli z adnotacją @hide
poza modułem Wi-Fi nie można uzyskać za pomocą kodu w module Wi-Fi. Urządzenia, które nie zawierają modułu Wi-Fi, mogą nadal używać @hide
zewnętrznych interfejsów API (na przykład z framework.jar
) w service-wifi
, wprowadzając następujące modyfikacje do frameworks/opt/net/wifi/service/Android.bp
.
Zarówno w
wifi-service-pre-jarjar
iservice-wifi
zmień atrybutsdk_version
nacore_platform
.Zarówno w
wifi-service-pre-jarjar
iservice-wifi
dodajframework
iandroid_system_server_stubs_current
do atrybutulibs
.Sprawdź, czy wynik jest podobny do poniższego 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
Android Compatibility Test Suite (CTS) weryfikuje funkcjonalność modułu Wi-Fi, przeprowadzając kompleksowy zestaw testów CTS w każdej wersji modułu. Możesz także uruchomić testy opisane w artykule Testowanie, debugowanie i dostrajanie sieci Wi-Fi .