Moduł Wi-Fi można aktualizować, co oznacza, że może otrzymywać aktualizacje funkcjonalności poza normalnym cyklem wydawniczym Androida. Moduł ten 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ójne działanie Wi-Fi na urządzeniach z Androidem i poprawki problemów ze współdziałaniem poprzez aktualizacje modułów.
Twórcy aplikacji uzyskują zmniejszoną fragmentację platformy.
Producenci OEM mogą spełniać 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 nakładki APK)-
res/
(nowość w Androidzie 11, konfiguracje Wi-Fi wyodrębnione zframeworks/base/core/res/res
) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(nowość w aplikacji na Androida 13 do uruchamiania okien dialogowych użytkownika żądanych przez usługę jest przechowywana tutaj).-
src/
-
com/android/wifi/dialog
(zawiera aktywność, z której uruchamiane są okna dialogowe)
-
-
AndroidManifest.xml
-
Android.bp
-
-
Powyższe katalogi zawierają także kod, który pozostaje poza modułowym komponentem systemu i w jego aktualnej 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ą skorzystać z przykładowych poleceń, aby pomóc w przenoszeniu poprawek z oryginalnych katalogów projektu do nowego katalogu projektu.
Przenoszenie łatki z frameworków/base/wifi
Generowanie pliku łatki w katalogu root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Zastosowanie pliku łatki do katalogu głównego/pakietów/modułów/Wifi
git am -p2 --directory=framework/ patch-file.txt
Przenoszenie łatki z frameworks/opt/net/wifi
Aby przenieść łatkę z frameworks/opt/net/wifi
, potrzebne są złożone kroki, ponieważ podczas migracji zmieniono hierarchię katalogów.
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 łatek zatwierdzeń
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/Wi-Fi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Zgniatanie dwóch zatwierdzeń z powrotem w jedno zatwierdzenie
git rebase -i
Zmień operację drugiego zatwierdzenia na squash
.
Edytuj odpowiednio 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 poniższe.
- 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.
- 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 przyszłe wersje mogą to zrobić. Aby zmniejszyć wysiłek związany z przenoszeniem zmian lokalizacji plików, zalecamy przesłanie jak największej liczby zmian do 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 komponenty.
- Biblioteka SDK (
framework-wifi.jar
) - Biblioteka usług (
service-wifi.jar
) - APK OsuLogin (
OsuLoginGoogle.apk
) - Zasób APK (
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
Moduł ten współdziała z frameworkiem przy użyciu wyłącznie stabilnego @SystemApi
(bez użycia API @hide
) i jest podpisany podpisem Google zamiast podpisem platformy.
Dostosowywanie
Moduł Wi-Fi nie obsługuje bezpośredniego dostosowywania, ale można dostosować konfigurację za pomocą nakładek zasobów wykonawczych (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 konfiguracyjnego operatora widocznego 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. Listę konfiguracji, które można nakładać, znajdziesz w packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
. Aby uzyskać szczegółowe informacje na temat zachowania konfiguracji, zobacz packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
. Aby zapoznać się z przykładową aplikacją nakładki, zobacz 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 pomyślnie nałożyć konfiguracje Wi-Fi.
Migrowanie 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 do formatu AOSP podczas aktualizacji urządzenia do dowolnej wersji Androida zawierającej moduł Wi-Fi. Haki potrzebne do tej konwersji znajdują się w klasie android.net.wifi.WifiMigration
.
Zaimplementuj konwersję formatu za pomocą następujących metod.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
Wywoływane przez moduł Wi-Fi w celu pobrania zawartości pliku magazynu udostępnionego Wi-Fi, który został przekonwertowany do formatu AOSP.
Pliki te były wcześniej (w systemie Android 10) przechowywane w folderze
/data/misc/wifi
na urządzeniu.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Wywoływane przez moduł Wi-Fi w celu pobrania zawartości pliku magazynu specyficznego dla użytkownika Wi-Fi, który został przekonwertowany do formatu AOSP.
Pliki te 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.) oznaczone @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 @hide
Wi-Fi, wykonując poniższe kroki.
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 umożliwić bibliotekom dostęp do interfejsów API
@hide
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 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
Do symboli oznaczonych @hide
poza modułem Wi-Fi nie można uzyskać dostępu za pomocą kodu w module Wi-Fi. Urządzenia, które nie zawierają modułu Wi-Fi, mogą nadal korzystać z zewnętrznych interfejsów API @hide
(na przykład z framework.jar
) w service-wifi
, wprowadzając następujące modyfikacje w frameworks/opt/net/wifi/service/Android.bp
.
Zarówno w
wifi-service-pre-jarjar
jak iservice-wifi
zmień atrybutsdk_version
nacore_platform
.Zarówno w
wifi-service-pre-jarjar
, jak 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
Pakiet testów zgodności systemu Android (CTS) weryfikuje funkcjonalność modułu Wi-Fi, uruchamiając kompleksowy zestaw testów CTS w każdej wersji modułu. Można także uruchomić testy opisane w części Testowanie, debugowanie i strojenie sieci Wi-Fi .