WLAN

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.

Komponenten des WLAN-Moduls

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 von frameworks/base/wifi/java)
      • tests/
        • android/net/wifi (Dateien von frameworks/base/wifi/tests)
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi (Dateien aus frameworks/opt/net/wifi/service/java)
      • tests/
        • com/android/server/wifi (Dateien aus frameworks/opt/net/wifi/tests)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (Dateien von frameworks/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 aus frameworks/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 Paket android.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

Beide 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 und WifiRttService
  • OsuLogin
  • ServiceWifiResources

Folgende Komponenten sind im Modul nicht enthalten, die weiterhin Teil des OEMs sind. AOSP-Build.

  • wificond native Komponente in system/connectivity/wificond
  • wificond-Schnittstelle (Klassen im Paket android.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.

WLAN anpassen

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.

  1. Entfernen Sie die Sichtbarkeitsbeschränkungen für framework-wifi um packages/modules/Wifi/framework/Android.bp, indem Sie die impl_library_visibility auf „Öffentlich“.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. Ä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 eine java_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",
        ],
    }
    
  3. Achten Sie darauf, dass „framework-wifi.impl“ vor „framework“ in der Liste angezeigt wird von libs. Die Reihenfolge der Abhängigkeiten im Attribut libs 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.

  1. Ändern Sie in sowohl wifi-service-pre-jarjar als auch in service-wifi das Feld sdk_version-Attribut zu core_platform.

  2. Fügen Sie in wifi-service-pre-jarjar und service-wifi beides framework hinzu und android_system_server_stubs_current auf das Attribut libs.

  3. 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.