Das WLAN-Modul kann aktualisiert werden, d. h. es kann außerhalb des normalen Android-Releasezyklus Updates für Funktionen erhalten. Dieses Modul enthält die folgenden Komponenten:
Abbildung 1: Komponenten und Architektur des WLAN-Moduls
Das WLAN-Modul bietet folgende Vorteile:
Endnutzer erhalten eine einheitliche WLAN-Nutzung auf allen Android-Geräten und Probleme mit der Interoperabilität werden durch Modulupdates behoben.
App-Entwickler profitieren von einer geringeren Plattformfragmentierung.
OEMs können die Anforderungen der Mobilfunkanbieter erfüllen und gleichzeitig die Kosten für individuelle Anpassungen senken, da keine unterschiedlichen Implementierungen derselben Anforderungen erforderlich sind.
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 vonframeworks/base/packages/OsuLogin
)ServiceResources/
(neu in Android 12; das Overlay-APK-Manifest wird hier gespeichert)res/
(neu in Android 11, WLAN-Konfigurationen werden ausframeworks/base/core/res/res
extrahiert)AndroidManifest.xml
Android.bp
WifiDialog/
(neu in Android 13: Die App zum Starten von vom Dienst angeforderten Nutzerdialogen wird hier gespeichert.)src/
com/android/wifi/dialog
(enthält die Aktivität, über die die Dialogfelder gestartet werden)
AndroidManifest.xml
Android.bp
Die oben genannten Verzeichnisse enthalten auch Code, der außerhalb der modularen Systemkomponente und an seinem aktuellen Speicherort verbleibt, z. B.:
wificond interface
(Klassen im Paketandroid.net.wifi.nl80211
, z. B.WifiNl80211Manager
)- Beispiel-App für Ressourcen-Overlays
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.
Patch von frameworks/base/wifi verschieben
Patchdatei in „root/frameworks/base/wifi“ generieren
git format-patch -1 commit --stdout > patch-file.txt
Patchdatei auf „root/packages/modules/Wifi“ anwenden
git am -p2 --directory=framework/ patch-file.txt
Patch von frameworks/opt/net/wifi verschieben
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 den Commit in frameworks/opt/net/wifi
in zwei Commits auf, einen für service/
und einen für tests/
.
HEAD-Commit migrieren
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
Zwei Commit-Patchdateien generieren
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Die beiden Patches auf Pakete/Module/WLAN anwenden
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Zwei Commits zu einem einzigen Commit zusammenführen
git rebase -i
Ändern Sie den Vorgang des zweiten Commits in squash
.
Bearbeiten Sie die Commit-Nachricht nach Bedarf.
Modulgrenze für Android 11
Der WLAN-Dienst wird weiterhin im Systemdienstprozess ausgeführt. Das WLAN-Modul enthält den gesamten Code in packages/modules/Wifi
, einschließlich des folgenden.
- SDK- und Dienstklassen für
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
undWifiRttService
OsuLogin
ServiceWifiResources
Das Modul schließt die folgenden Komponenten aus, die Teil der AOSP-Build des OEMs bleiben.
- Native
wificond
-Komponente insystem/connectivity/wificond
wificond
-Schnittstelle (Klassen im Paketandroid.net.wifi.nl80211
, z. B.WifiNl80211Manager
)android.net.wifi.SoftApConfToXmlMigrationUtil
android.net.wifi.WifiNetworkScoreCache
android.net.wifi.WifiMigration
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_system_iface
Unter Android 11 werden Dateien nicht verschoben. In zukünftigen Releases ist dies jedoch möglich. Um den Aufwand beim Portieren von Änderungen am Dateispeicherort zu reduzieren, empfehlen wir, so viele Änderungen wie möglich an AOSP weiterzuleiten, nachdem sie auf Android 11 portiert oder proprietäre Erweiterungen so umgestaltet wurden, dass sie formale Android APIs oder HAL-Erweiterungen von Anbietern verwenden, um sie vom AOSP-Code zu entkoppeln.
Modulformat
Das WLAN-Modul (com.android.wifi
) ist im APEX-Format verfügbar und kann auf Geräten mit Android 11 oder höher verwendet werden. 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 WLAN-Modul hängt von den folgenden Komponenten ab.
- Konnektivität
- Telefonie
- Proto-Bibliotheken
- Sonstige Systemkomponenten
- Wi‑Fi HALs
wificond
bouncycastle
ksoap2
libnanohttpd
Dieses Modul interagiert mit dem Framework nur über stabile @SystemApi
(keine @hide
API-Nutzung) und ist mit einer Google-Signatur statt einer Plattformsignatur signiert.
Personalisierung
Das WLAN-Modul unterstützt keine direkte Anpassung. Sie können die Konfiguration jedoch mithilfe von Runtime Resource Overlays (RROs) oder Mobilfunkanbieterkonfigurationen anpassen.
Abbildung 2: WLAN-Modul anpassen
- Für kleinere Anpassungen können Sie Einstellungen in der RRO
config
aktivieren oder deaktivieren. - Für mehr Kontrolle kannst du die Konfigurationswerte für jeden als
@SystemAPI
freigegebenen Konfigurationsschlüssel des Mobilfunkanbieters anpassen.
Laufzeit-Ressourcen-Overlays verwenden
Sie können das WLAN-Modul anpassen, indem Sie die Standardkonfigurationen mithilfe von RROs überschreiben. Eine Liste der überlagerbaren Konfigurationen finden Sie unter packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
.
Weitere Informationen 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/
.
Da das targetPackage
-Attribut in der device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
-Datei auf com.android.wifi.resources
festgelegt ist und das vom WLAN-Modul bereitgestellte Ressourcen-APK den Paketnamen com.google.android.wifi.resources
hat, müssen Sie das Overlay-APK targetPackage
auf com.google.android.wifi.resources
festlegen, damit WLAN-Konfigurationen überlagert werden können.
Speicherformat für die Konfiguration migrieren
Das WLAN-Modul kann nur das AOSP-WLAN-Konfigurationsspeicherformat parsen. Wenn Sie das Speicherformat der WLAN-Konfiguration (einschließlich der gespeicherten Netzwerkliste des Nutzers) zuvor geändert haben, müssen Sie diese Daten in das AOSP-Format konvertieren, wenn Sie ein Gerät auf eine Android-Version aktualisieren, die das WLAN-Modul enthält. Die für diese Umwandlung erforderlichen Hooks befinden sich in der Klasse android.net.wifi.WifiMigration
.
Implementieren Sie die Formatkonvertierung in den folgenden Methoden.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
Wird vom WLAN-Modul aufgerufen, um den Inhalt der WLAN-freigegebenen Speicherdatei abzurufen, die in das AOSP-Format konvertiert wurde.
Diese Dateien wurden zuvor (unter Android 10) auf dem Gerät im Ordner
/data/misc/wifi
gespeichert.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Wird vom WLAN-Modul aufgerufen, um nutzerspezifische WLAN-Speicherdateiinhalte abzurufen, die in das AOSP-Format konvertiert wurden.
Diese Dateien wurden zuvor (unter Android 10) im Ordner
/data/misc_ce/<userId>/wifi
auf dem Gerät gespeichert.
Auf ausgeblendete WLAN-APIs zugreifen
Symbole (Klassen, Methoden, Felder usw.), die im WLAN-Modul mit @hide
annotiert sind, sind nicht Teil der öffentlichen API-Oberfläche und können nicht auf Geräten mit installiertem Modul aufgerufen werden. Auf Geräten ohne WLAN-Modul können Sie die @hide
-WLAN-APIs mit den folgenden Schritten weiterhin verwenden.
Heben Sie die Sichtbarkeitseinschränkungen für
framework-wifi
unterpackages/modules/Wifi/framework/Android.bp
auf, indem Sie das Attributimpl_library_visibility
in „öffentlich“ ä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 Bibliothekzugriff auf
@hide
-Wi‑Fi APIs zuzulassen. Im Folgenden ist beispielsweise eine Build-Regel für einejava_library
zu sehen.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
Wenn Sie den Bibliothekzugriff für
foo-lib
zulassen möchten, ändern Sie die Build-Regel so:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Achten Sie darauf, dass
framework-wifi.impl
in der Liste vonlibs
vorframework
steht. Die Reihenfolge der Abhängigkeiten imlibs
-Attribut ist wichtig.
Auf ausgeblendete Framework-APIs zugreifen
Auf Symbole, die außerhalb des WLAN-Moduls mit @hide
gekennzeichnet sind, kann nicht über Code im WLAN-Modul zugegriffen werden. Geräte ohne WLAN-Modul können weiterhin @hide
-externe APIs (z. B. von framework.jar
) in service-wifi
verwenden. Dazu müssen Sie die folgenden Änderungen an frameworks/opt/net/wifi/service/Android.bp
vornehmen.
Ändern Sie sowohl in
wifi-service-pre-jarjar
als auch inservice-wifi
das Attributsdk_version
incore_platform
.Fügen Sie
framework
undandroid_system_server_stubs_current
sowohl inwifi-service-pre-jarjar
als auch inservice-wifi
dem Attributlibs
hinzu.Das Ergebnis sollte in etwa so aussehen wie im folgenden Codebeispiel.
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) prüft die Funktionen des WLAN-Moduls, indem für jede Modulversion eine umfassende Reihe von CTS-Tests ausgeführt wird. Sie können auch die unter WLAN testen, debuggen und optimieren beschriebenen Tests ausführen.