Das Wi-Fi-Modul ist aktualisierbar, d. h. es kann Funktionsupdates außerhalb des normalen Android-Release-Zyklus erhalten. Dieses Modul enthält die folgenden Komponenten.
Abbildung 1. Komponenten und Architektur des Wi-Fi-Moduls
Das Wi-Fi-Modul bietet die folgenden Vorteile.
Endbenutzer erhalten ein konsistentes Wi-Fi-Erlebnis auf allen Android-Geräten und Korrekturen für Interoperabilitätsprobleme durch Modul-Updates.
App-Entwickler profitieren von einer reduzierten Plattformfragmentierung.
OEMs können Carrier-Anforderungen erfüllen und gleichzeitig die Kosten für individuelle Anpassungen reduzieren (da sie nicht unterschiedliche Implementierungen derselben Anforderungen auf unterschiedliche Weise benötigen).
Modulgrenze für Android 12 und Android 13
-
packages/modules/Wifi
-
framework
-
java/
-
android/net/wifi
(Dateien vonframeworks/base/wifi/java
)
-
-
tests/
-
android/net/wifi
(Dateien vonframeworks/base/wifi/tests
)
-
-
aidl-export/
-
api/
-
Android.bp
-
-
service/
-
java/
-
com/android/server/wifi
(Dateien vonframeworks/opt/net/wifi/service/java
)
-
-
tests/
-
com/android/server/wifi
(Dateien vonframeworks/opt/net/wifi/tests
)
-
-
proto/
-
Android.bp
-
proguard.flags
-
wifi.rc
-
-
OsuLogin/
(Dateien ausframeworks/base/packages/OsuLogin
) -
ServiceResources/
(neu in Android 12, Overlay-APK-Manifest wird hier gespeichert)-
res/
(neu in Android 11, Wi-Fi-Konfigurationen extrahiert ausframeworks/base/core/res/res
) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(neu in Android 13 App zum Starten von Benutzerdialogen, die vom Dienst angefordert werden, wird hier gespeichert.)-
src/
-
com/android/wifi/dialog
(Enthält die Aktivität, von der aus die Dialoge gestartet werden)
-
-
AndroidManifest.xml
-
Android.bp
-
-
Die oben genannten Verzeichnisse enthalten auch Code, der außerhalb der modularen Systemkomponente und an seinem aktuellen Ort verbleibt, zum Beispiel:
-
wificond interface
(Klassen im Paketandroid.net.wifi.nl80211
, zum BeispielWifiNl80211Manager
) - Beispiel-Ressourcen-Overlay-App
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
OEMs können die Beispielbefehle verwenden, um ihre Patches aus den ursprünglichen Projektverzeichnissen in das neue Projektverzeichnis zu verschieben.
Verschieben eines Patches von frameworks/base/wifi
Generieren der Patch-Datei in root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Anwenden der Patch-Datei auf root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Verschieben eines Patches von frameworks/opt/net/wifi
Um den Patch von frameworks/opt/net/wifi
zu verschieben, sind komplexe Schritte erforderlich, da die Verzeichnishierarchie während der Migration geändert wurde.
Teilen Sie in frameworks/opt/net/wifi
den Commit in zwei Commits auf, einen für service/
und einen für tests/
.
Migrieren des HEAD-Commits
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
Generieren von zwei Commit-Patch-Dateien
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Anwenden der beiden Patches auf Pakete/Module/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Squashing der beiden Commits zurück in einen Commit
git rebase -i
Ändern Sie die Operation des zweiten Commits in squash
.
Bearbeiten Sie die Commit-Nachricht entsprechend.
Modulgrenze für Android 11
Der Wi-Fi-Dienst wird weiterhin innerhalb des Systemdienstprozesses ausgeführt. Das Wi-Fi-Modul enthält den gesamten Code in packages/modules/Wifi
einschließlich der folgenden.
- SDK und Dienstklassen für
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
undWifiRttService
-
OsuLogin
-
ServiceWifiResources
Das Modul schließt die folgenden Komponenten aus, die Teil des AOSP-Builds des OEM bleiben.
-
wificond
native Komponente insystem/connectivity/wificond
-
wificond
Schnittstelle (Klassen im Paketandroid.net.wifi.nl80211
, zum BeispielWifiNl80211Manager
) -
android.net.wifi.SoftApConfToXmlMigrationUtil
-
android.net.wifi.WifiNetworkScoreCache
-
android.net.wifi.WifiMigration
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
Android 11 verschiebt keine Dateien, aber zukünftige Versionen könnten dies tun. Um den Aufwand für das Portieren von Änderungen an Dateispeicherorten zu reduzieren, empfehlen wir, so viele Änderungen wie möglich an AOSP vorzulagern (nachdem sie auf Android 11 portiert oder proprietäre Erweiterungen umgestaltet wurden, um formale Android-APIs oder Anbieter-HAL-Erweiterungen zu verwenden, um sie vom AOSP-Code zu entwirren.
Modulformat
Das WLAN-Modul ( com.android.wifi
) ist im APEX -Format und für Geräte mit Android 11 oder höher verfügbar. Die APEX-Datei enthält die folgenden Komponenten.
- SDK-Bibliothek (
framework-wifi.jar
) - Dienstbibliothek (
service-wifi.jar
) - OsuLogin APK (
OsuLoginGoogle.apk
) - Ressourcen-APK (
ServiceWifiResourcesGoogle.apk
) - WFA-Zertifikate
Modulabhängigkeiten
Das Wi-Fi-Modul hängt von den folgenden Komponenten ab.
- Konnektivität
- Telefonie
- Proto-Bibliotheken
- Diverse Systemkomponenten
- WiFi-HALs
-
wificond
-
bouncycastle
-
ksoap2
-
libnanohttpd
Dieses Modul interagiert mit dem Framework nur über die stabile @SystemApi
(keine Verwendung der @ @hide
API) und ist mit einer Google-Signatur anstelle einer Plattformsignatur signiert.
Anpassen
Das Wi-Fi-Modul unterstützt keine direkte Anpassung, aber Sie können die Konfiguration mithilfe von Runtime Resource Overlays (RROs) oder Netzbetreiberkonfigurationen anpassen.
Abbildung 2. Anpassung des Wi-Fi-Moduls
- Aktivieren oder deaktivieren Sie für kleine Anpassungen die Einstellungen in der RRO-
config
. - Passen Sie für mehr Kontrolle die Konfigurationswerte für jeden Carrier-Konfigurationsschlüssel an, der als
@SystemAPI
.
Verwenden von Laufzeitressourcen-Overlays
Sie können das Wi-Fi-Modul anpassen, indem Sie die Standardkonfigurationen mithilfe von RROs überschreiben. Eine Liste überlagerbarer Konfigurationen finden Sie unter packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
. Einzelheiten zum Konfigurationsverhalten finden Sie unter packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
. Eine Beispiel-Overlay-App finden Sie unter device/google/coral/rro_overlays/WifiOverlay/
.
Weil die Datei device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
“ das targetPackage
Attribut auf com.android.wifi.resources
“ setzt und die vom Wi-Fi-Modul bereitgestellte Ressourcen-APK den Paketnamen com.google.android.wifi.resources
, müssen Sie das Overlay-APKS targetPackage
auf com.google.android.wifi.resources
festlegen, um WLAN-Konfigurationen erfolgreich zu überlagern.
Migrieren des Konfigurationsspeicherformats
Das Wi-Fi-Modul kann nur das AOSP-Wi-Fi-Konfigurationsspeicherformat parsen. Wenn Sie zuvor das Wi-Fi-Konfigurationsspeicherformat geändert haben (das die gespeicherte Netzwerkliste des Benutzers enthält), müssen Sie diese Daten in das AOSP-Format konvertieren, wenn Sie ein Gerät auf eine Android-Version aktualisieren, die das Wi-Fi-Modul enthält. Die für diese Konvertierung erforderlichen Hooks befinden sich in der Klasse android.net.wifi.WifiMigration
.
Implementieren Sie die Formatkonvertierung in den folgenden Methoden.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
Wird vom Wi-Fi-Modul aufgerufen, um die Inhalte der gemeinsam genutzten Wi-Fi-Speicherdatei abzurufen, die in das AOSP-Format konvertiert wurden.
Diese Dateien wurden zuvor (in Android 10) im Ordner
/data/misc/wifi
auf dem Gerät gespeichert.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Wird vom Wi-Fi-Modul aufgerufen, um benutzerspezifische Wi-Fi-Speicherdateiinhalte abzurufen, die in das AOSP-Format konvertiert wurden.
Diese Dateien wurden zuvor (in Android 10) im Ordner
/data/misc_ce/<userId>/wifi
auf dem Gerät gespeichert.
Zugriff auf versteckte Wi-Fi-APIs
Symbole (Klassen, Methoden, Felder usw.), die im Wi-Fi-Modul mit @hide
annotiert sind, sind nicht Teil seiner öffentlichen API-Oberfläche und können auf Geräten mit installiertem Modul nicht aufgerufen werden. Geräte, die das Wi-Fi-Modul nicht enthalten, können mithilfe der folgenden Schritte weiterhin @hide
Wi-Fi-APIs verwenden.
Entfernen Sie die Sichtbarkeitsbeschränkungen für
framework-wifi
unterpackages/modules/Wifi/framework/Android.bp
, indem Sie das Attributimpl_library_visibility
auf public ändern.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Ändern Sie die Build-Regel, um den Zugriff auf die Bibliothek
@hide
Wi-Fi APIs zuzulassen. Das Folgende ist beispielsweise eine Erstellungsregel für einejava_library
.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
Um den Bibliothekszugriff für
foo-lib
zuzulassen, ändern Sie die Erstellungsregel wie unten gezeigt.java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Stellen Sie sicher, dass
framework-wifi.impl
vorframework
in der Liste derlibs
erscheint. Die Reihenfolge der Abhängigkeiten imlibs
Attribut ist signifikant.
Zugriff auf versteckte Framework-APIs
Auf mit @hide
kommentierte Symbole außerhalb des Wi-Fi-Moduls kann nicht per Code innerhalb des Wi-Fi-Moduls zugegriffen werden. Geräte, die das Wi-Fi-Modul nicht enthalten, können weiterhin @hide
externe APIs (z. B. von framework.jar
) in service-wifi
verwenden, indem sie die folgenden Änderungen an frameworks/opt/net/wifi/service/Android.bp
.
Ändern Sie sowohl in wifi
wifi-service-pre-jarjar
als auch inservice-wifi
sdk_version
das Attribut sdk_version incore_platform
.Fügen Sie sowohl in
wifi-service-pre-jarjar
als auch inservice-wifi
wififramework
undandroid_system_server_stubs_current
zumlibs
-Attribut hinzu.Stellen Sie sicher, dass das Ergebnis dem folgenden Codebeispiel ähnelt.
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", ], }
Testen
Die Android Compatibility Test Suite (CTS) überprüft die Funktionalität des Wi-Fi-Moduls, indem sie eine umfassende Reihe von CTS-Tests für jede Modulversion durchführt. Sie können auch die unter Testen, Debuggen und Optimieren von Wi-Fi beschriebenen Tests ausführen.