Das WLAN-Modul kann aktualisiert werden, d. h., Funktionen können aktualisiert werden außerhalb des normalen Android-Releasezyklus liegt. Dieses Modul umfasst Folgendes: Komponenten.
Abbildung 1: Komponenten und Architektur des WLAN-Moduls
Das WLAN-Modul bietet die folgenden Vorteile.
Endnutzer erhalten eine einheitliche WLAN-Nutzung auf allen Android-Geräten und Fehlerkorrekturen Interoperabilitätsprobleme durch Modulaktualisierungen.
Die Plattformfragmentierung für App-Entwickler wird reduziert.
OEMs können die Anforderungen von Mobilfunkanbietern erfüllen und gleichzeitig die Kosten für Anpassungen vornehmen, da keine unterschiedlichen Implementierungen des auf unterschiedliche Weise erfüllt.
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 ausframeworks/opt/net/wifi/service/java
)
tests/
com/android/server/wifi
(Dateien ausframeworks/opt/net/wifi/tests
)
proto/
Android.bp
proguard.flags
wifi.rc
OsuLogin/
(Dateien vonframeworks/base/packages/OsuLogin
)ServiceResources/
(neu in Android 12, Overlay) APK-Manifest gespeichert) <ph type="x-smartling-placeholder">- </ph>
res/
(neu in Android 11, WLAN-Konfigurationen) extrahiert aus ausframeworks/base/core/res/res
)AndroidManifest.xml
Android.bp
WifiDialog/
(neu in der Android 13 App für vom Dienst angeforderte Nutzerdialoge starten, werden hier gespeichert.)src/
com/android/wifi/dialog
(enthält die Aktivität, die die Dialoge sind) gestartet ab)
AndroidManifest.xml
Android.bp
Die vorherigen Verzeichnisse enthalten Code, der außerhalb der modularen Systemkomponente aktuellen Standort, zum Beispiel:
wificond interface
(Klassen im Paketandroid.net.wifi.nl80211
, für Beispiel:WifiNl80211Manager
)- Beispiel für eine App für das Ressourcen-Overlay
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_system_iface
OEMs können die Beispielbefehle nutzen, um ihre Patches zu verschieben. aus den ursprünglichen Projektverzeichnissen in das neue Projektverzeichnis.
Patch aus Frameworks/Basis/WLAN 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 aus „frameworks/opt/net/wifi“ verschieben
Zum Verschieben des Patch von frameworks/opt/net/wifi
sind komplexe Schritte erforderlich
da die Verzeichnishierarchie während der Migration geändert wurde.
Teilen Sie das Commit in frameworks/opt/net/wifi
in zwei Commits auf, einen für
service/
und eins 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-Patch-Dateien 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
Squashing der beiden Commits wieder zu einem Commit
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 innerhalb des Systemdienstprozesses weiter 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
Folgende Komponenten sind im Modul nicht enthalten, die weiterhin Teil des OEMs sind. AOSP-Build.
wificond
native Komponente insystem/connectivity/wificond
wificond
-Schnittstelle (Klassen im Paketandroid.net.wifi.nl80211
, für Beispiel:WifiNl80211Manager
)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 Releases Um den Aufwand für das Portieren von Änderungen am Dateispeicherort zu verringern, so viele Änderungen wie möglich an AOSP zu empfehlen (nach der Portierung Android 11 oder refaktorierte proprietäre Erweiterungen formale Android-APIs oder HAL-Erweiterungen von Anbietern, um sie vom AOSP-Code zu entkoppeln.
Modulformat
Das WLAN-Modul (com.android.wifi
) befindet sich in
APEX-Format und ist für Geräte verfügbar.
mit Android 11 oder höher. 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 ist von den folgenden Komponenten abhängig.
- Konnektivität
- Telefonie
- Protobibliotheken
- Verschiedene Systemkomponenten
- WLAN-HALs
wificond
bouncycastle
ksoap2
libnanohttpd
Dieses Modul interagiert nur über den stabilen @SystemApi
mit dem Framework (keine
@hide
API-Nutzung) und ist mit einer Google-Signatur anstelle einer Plattform signiert.
Signatur.
Personalisierung
Das WLAN-Modul unterstützt keine direkte Anpassung. Du kannst das Konfiguration mithilfe von Laufzeitressourcen-Overlays (RROs) oder Mobilfunkanbieter-Konfigurationen.
Abbildung 2: Anpassung des WLAN-Moduls
- Aktivieren oder deaktivieren Sie für kleine Anpassungen die Einstellungen in der RRO
config
. - Für mehr Kontrolle die Konfigurationswerte für jeden Konfigurationsschlüssel des Mobilfunkanbieters anpassen
bereitgestellt als
@SystemAPI
.
Laufzeitressourcen-Overlays verwenden
Du kannst das WLAN-Modul anpassen, indem du die Standardkonfigurationen überschreibst
mit RROs. Eine Liste der überblendbaren 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
Ein Beispiel für eine Overlay-App finden Sie unter
device/google/coral/rro_overlays/WifiOverlay/
Da die device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
legt das Attribut targetPackage
auf com.android.wifi.resources
fest und
Ressourcen-APK, das vom WLAN-Modul bereitgestellt wird, hat einen Paketnamen
com.google.android.wifi.resources
, du musst die Overlay-APKs festlegen
targetPackage
bis com.google.android.wifi.resources
, um das WLAN-Overlay einzublenden
erfolgreich konfiguriert.
Speicherformat der Migrationskonfiguration
Das Wi-Fi-Modul kann nur das AOSP-Wi-Fi-Konfigurationsspeicherformat parsen. Wenn
das Speicherformat der WLAN-Konfiguration geändert haben (das
die Liste der gespeicherten Netzwerke des Nutzers enthält), müssen diese Daten in den AOSP-
wenn Sie ein Gerät auf eine Android-Version aktualisieren, die die WLAN-Verbindung
-Modul. 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 WLAN-Modul aufgerufen, um den Inhalt der über WLAN freigegebenen Speicherdatei abzurufen die in das AOSP-Format konvertiert wurden.
Diese Dateien wurden zuvor (in Android 10) im
/data/misc/wifi
gespeichert Ordner auf dem Gerät.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Wird vom WLAN-Modul aufgerufen, um nutzerspezifische WLAN-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.
Auf verborgene Wi-Fi APIs zugreifen
Symbole (Klassen, Methoden, Felder usw.), die im WLAN mit @hide
gekennzeichnet sind
nicht Teil seiner öffentlichen API-Oberfläche sind und über
Geräte mit installiertem Modul. Geräte ohne WLAN
-Modul kann mit den folgenden Schritten weiterhin @hide
Wi-Fi APIs verwenden.
Entfernen Sie die Sichtbarkeitsbeschränkungen für
framework-wifi
umpackages/modules/Wifi/framework/Android.bp
, indem Sie dieimpl_library_visibility
auf „Öffentlich“.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Ändern Sie die Build-Regel so, dass der Bibliothekszugriff auf
@hide
Wi-Fi APIs gewährt wird. Für Das folgende Beispiel zeigt eine Build-Regel für einejava_library
.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
Ändern Sie die Build-Regel so, um
foo-lib
Zugriff auf die Bibliothek zu gewähren:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Achten Sie darauf, dass „
framework-wifi.impl
“ vor „framework
“ in der Liste angezeigt wird vonlibs
. Die Reihenfolge der Abhängigkeiten im Attributlibs
ist wichtig.
Auf verborgene Framework-APIs zugreifen
Auf Symbole mit der Anmerkung @hide
außerhalb des WLAN-Moduls kann nicht zugegriffen werden
im WLAN-Modul ein. Geräte ohne WLAN-Modul können
weiterhin @hide
externe APIs (z. B. von framework.jar
) in
service-wifi
durch folgende Änderungen an
frameworks/opt/net/wifi/service/Android.bp
.
Ändern Sie in sowohl
wifi-service-pre-jarjar
als auch inservice-wifi
das Feldsdk_version
-Attribut zucore_platform
.Fügen Sie in
wifi-service-pre-jarjar
undservice-wifi
beidesframework
hinzu undandroid_system_server_stubs_current
auf das Attributlibs
.Prüfen Sie, ob 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) prüft die eine Reihe von CTS-Tests für jedes Modul. Veröffentlichung. Sie können auch die unter Test, Fehlerbehebung und Feinabstimmung beschriebenen Tests ausführen. WLAN.