Wifi

Le module Wi-Fi peut être mis à jour, ce qui signifie qu'il peut recevoir des mises à jour de fonctionnalités en dehors du cycle de publication normal d'Android. Ce module contient les composants suivants.

Composants du module Wi-Fi

Figure 1. Composants et architecture du module Wi-Fi

Le module Wi-Fi offre les avantages suivants.

  • Les utilisateurs finaux bénéficient d'une expérience Wi-Fi cohérente sur tous les appareils Android et de correctifs pour les problèmes d'interopérabilité grâce aux mises à jour des modules.

  • Les développeurs d'applications bénéficient d'une fragmentation réduite de la plate-forme.

  • Les OEM peuvent répondre aux exigences des opérateurs tout en réduisant les coûts des personnalisations individuelles (car ils n'ont pas besoin de différentes implémentations des mêmes exigences de différentes manières).

Limite de module pour Android 12 et Android 13

  • packages/modules/Wifi
    • framework
      • java/
        • android/net/wifi (fichiers de frameworks/base/wifi/java )
      • tests/
        • android/net/wifi (fichiers de frameworks/base/wifi/tests )
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi (fichiers de frameworks/opt/net/wifi/service/java )
      • tests/
        • com/android/server/wifi (fichiers de frameworks/opt/net/wifi/tests )
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (fichiers de frameworks/base/packages/OsuLogin )
    • ServiceResources/ (nouveau dans Android 12, le manifeste Overlay APK est stocké ici)
      • res/ (nouveau dans Android 11, configurations Wi-Fi extraites de frameworks/base/core/res/res )
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (nouveau dans l'application Android 13 pour lancer les dialogues utilisateur demandés par le service est stocké ici.)
      • src/
        • com/android/wifi/dialog (Contient l'activité à partir de laquelle les dialogues sont lancés)
      • AndroidManifest.xml
      • Android.bp

Les répertoires ci-dessus contiennent également du code qui reste en dehors du composant système modulaire et à son emplacement actuel, par exemple :

  • wificond interface (classes dans le package android.net.wifi.nl80211 , par exemple, WifiNl80211Manager )
  • Exemple d'application de superposition de ressources
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Les OEM peuvent utiliser les exemples de commandes pour déplacer leurs correctifs des répertoires de projet d'origine vers le nouveau répertoire de projet.

Déplacer un patch depuis frameworks/base/wifi

Génération du fichier patch dans root/frameworks/base/wifi

git format-patch -1 commit --stdout > patch-file.txt

Application du fichier de correctif à root/packages/modules/Wifi

git am -p2 --directory=framework/ patch-file.txt

Déplacer un patch depuis frameworks/opt/net/wifi

Pour déplacer le correctif depuis frameworks/opt/net/wifi , des étapes complexes sont nécessaires car la hiérarchie des répertoires a été modifiée lors de la migration.

Dans frameworks/opt/net/wifi , divisez le commit en deux commits, un pour service/ et un pour tests/ .

Migrer le commit 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

Génération de deux fichiers de correctif de validation

git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt

Application des deux correctifs aux packages/modules/Wifi

git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt

Regrouper les deux commits en un seul commit

git rebase -i

Remplacez l'opération du second commit par squash .

Modifiez le message de validation comme il convient.

Limite de module pour Android 11

Le service Wi-Fi continue de fonctionner dans le processus de service système. Le module Wi-Fi comprend tout le code dans les packages/modules/Wifi y compris les éléments suivants.

  • SDK et classes de service pour WifiService , WifiP2pService , WifiAwareService , WifiScannerService et WifiRttService
  • OsuLogin
  • ServiceWifiResources

Le module exclut les composants suivants, qui font toujours partie de la version AOSP de l'OEM.

  • composant natif wificond dans system/connectivity/wificond
  • interface wificond (classes dans le package android.net.wifi.nl80211 , par exemple, WifiNl80211Manager )
  • android.net.wifi.SoftApConfToXmlMigrationUtil
  • android.net.wifi.WifiNetworkScoreCache
  • android.net.wifi.WifiMigration
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Android 11 ne déplace pas les fichiers, mais les futures versions pourraient le faire. Pour réduire l'effort impliqué dans le portage des changements d'emplacement des fichiers, nous recommandons en amont autant de changements que possible vers AOSP (après les avoir portés sur Android 11 ou refactorisé les extensions propriétaires pour utiliser les API Android formelles ou les extensions HAL du fournisseur pour les démêler du code AOSP.

Format des modules

Le module Wi-Fi ( com.android.wifi ) est au format APEX et est disponible pour les appareils fonctionnant sous Android 11 ou supérieur. Le fichier APEX comprend les composants suivants.

  • Bibliothèque SDK ( framework-wifi.jar )
  • Bibliothèque de services ( service-wifi.jar )
  • OsuLogin APK ( OsuLoginGoogle.apk )
  • Ressource APK ( ServiceWifiResourcesGoogle.apk )
  • Certificats WFA

Dépendances des modules

Le module Wi-Fi dépend des composants suivants.

  • Connectivité
  • Téléphonie
  • Proto-bibliothèques
  • Composants divers du système
  • HAL Wi-Fi
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

Ce module interagit avec le framework en utilisant uniquement @SystemApi stable (pas d'utilisation de l'API @hide ) et est signé avec une signature Google au lieu d'une signature de plate-forme.

Personnalisation

Le module Wi-Fi ne prend pas en charge la personnalisation directe, mais vous pouvez personnaliser la configuration à l'aide de superpositions de ressources d'exécution (RRO) ou de configurations d'opérateur.

Personnalisation Wi-Fi

Figure 2. Personnalisation du module Wi-Fi

  • Pour les petites personnalisations, activez ou désactivez les paramètres dans la config RRO.
  • Pour plus de contrôle, personnalisez les valeurs de configuration pour toute clé de configuration d'opérateur exposée en tant que @SystemAPI .

Utilisation des superpositions de ressources d'exécution

Vous pouvez personnaliser le module Wi-Fi en remplaçant les configurations par défaut à l'aide de RRO. Pour une liste des configurations superposables, reportez-vous à packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml . Pour plus de détails sur le comportement de configuration, reportez-vous à packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml . Pour un exemple d'application de superposition, reportez-vous à device/google/coral/rro_overlays/WifiOverlay/ .

Étant donné que le fichier device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml définit l'attribut targetPackage sur com.android.wifi.resources et que la ressource APK fournie par le module Wi-Fi porte le nom de package com.google.android.wifi.resources , vous devez définir la superposition APKS targetPackage sur com.google.android.wifi.resources pour superposer les configurations Wi-Fi avec succès.

Migrer le format de stockage de la configuration

Le module Wi-Fi ne peut analyser que le format de stockage de configuration Wi-Fi AOSP. Si vous avez déjà modifié le format de stockage de la configuration Wi-Fi (qui inclut la liste des réseaux enregistrés de l'utilisateur), vous devez convertir ces données au format AOSP lors de la mise à niveau d'un appareil vers n'importe quelle version d'Android qui inclut le module Wi-Fi. Les hooks nécessaires à cette conversion se trouvent dans la classe android.net.wifi.WifiMigration .

Implémentez la conversion de format dans les méthodes suivantes.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Invoqué par le module Wi-Fi pour récupérer le contenu du fichier de magasin partagé Wi-Fi qui a été converti au format AOSP.

    • Ces fichiers étaient auparavant (dans Android 10) stockés dans le dossier /data/misc/wifi sur l'appareil.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Invoqué par le module Wi-Fi pour récupérer le contenu du fichier de magasin spécifique à l'utilisateur Wi-Fi qui a été converti au format AOSP.

    • Ces fichiers étaient auparavant (dans Android 10) stockés dans le /data/misc_ce/<userId>/wifi sur l'appareil.

Accéder aux API Wi-Fi cachées

Les symboles (classes, méthodes, champs, etc.) annotés avec @hide dans le module Wi-Fi ne font pas partie de sa surface d'API publique et ne sont pas accessibles sur les appareils sur lesquels le module est installé. Les appareils qui n'incluent pas le module Wi-Fi peuvent continuer à utiliser les API Wi-Fi @hide en suivant les étapes suivantes.

  1. Supprimez les restrictions de visibilité placées sur framework-wifi dans packages/modules/Wifi/framework/Android.bp en modifiant l'attribut impl_library_visibility en public.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. Modifiez la règle de construction pour autoriser l'accès à la bibliothèque @hide API Wi-Fi. Par exemple, voici une règle de construction pour une java_library .

    java_library {
        name: "foo-lib",
    
        // no sdk_version attribute defined
    
        libs: [
            "dependency1",
            "dependency2",
        ],
    }
    

    Pour autoriser l'accès à la bibliothèque pour foo-lib , modifiez la règle de construction comme indiqué ci-dessous.

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. Assurez-vous que framework-wifi.impl apparaît avant framework dans la liste des libs . L'ordre des dépendances dans l'attribut libs est important.

Accéder aux API de framework cachées

Les symboles annotés avec @hide à l'extérieur du module Wi-Fi ne sont pas accessibles par code dans le module Wi-Fi. Les appareils qui n'incluent pas le module Wi-Fi peuvent continuer à utiliser les API externes @hide (par exemple, à partir de framework.jar ) dans service-wifi en apportant les modifications suivantes à frameworks/opt/net/wifi/service/Android.bp .

  1. Dans wifi-service-pre-jarjar et service-wifi , remplacez l'attribut sdk_version par core_platform .

  2. Dans wifi-service-pre-jarjar et service-wifi , ajoutez framework et android_system_server_stubs_current à l'attribut libs .

  3. Vérifiez que le résultat est similaire à l'exemple de code suivant.

    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",
        ],
    }
    

Essai

La suite de tests de compatibilité Android (CTS) vérifie la fonctionnalité du module Wi-Fi en exécutant un ensemble complet de tests CTS sur chaque version du module. Vous pouvez également exécuter les tests décrits dans Test, débogage et réglage du Wi-Fi .