Wi-Fi

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

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 leurs appareils Android, avec des correctifs à régler. aux problèmes d'interopérabilité via des mises à jour de modules.

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

  • Les OEM peuvent répondre aux exigences des opérateurs tout en réduisant les coûts pour personnalisations individuelles (elles n'ont pas besoin d'implémentations différentes les 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, Overlay le fichier manifeste de l'APK est stocké ici) <ph type="x-smartling-placeholder">
        </ph>
      • res/ (nouveau dans Android 11, configurations Wi-Fi) extrait de frameworks/base/core/res/res).
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (nouveauté de l'application Android 13 pour les boîtes de dialogue de lancement de l'utilisateur demandées par le service y est stockée.)
      • src/
        • com/android/wifi/dialog (contient l'activité pour laquelle les boîtes de dialogue sont depuis le lancement)
      • AndroidManifest.xml
      • Android.bp

Les répertoires précédents contiennent également du code qui reste en dehors du composant système modulaire et dans son votre position actuelle, par exemple:

  • wificond interface (classes du 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 correctif depuis les frameworks, la base ou le Wi-Fi

Générer le fichier correctif dans root/frameworks/base/wifi

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

Appliquer le fichier correctif à root/packages/modules/Wifi

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

Déplacer un correctif 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 une 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érer deux fichiers de correctif de commit

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

Appliquer les deux correctifs aux packages/modules/Wifi

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

Écraser les deux commits en un seul commit

git rebase -i

Définissez l'opération du deuxième commit sur squash.

Modifiez le message de commit selon vos besoins.

Limite de module pour Android 11

Le service Wi-Fi continue de fonctionner dans le processus de service système. Le Wi-Fi inclut tout le code dans 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 n'inclut pas les composants suivants, qui font toujours partie de la protection Build AOSP.

  • wificond composant natif dans system/connectivity/wificond
  • Interface wificond (classes du package android.net.wifi.nl80211, pour 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 versions futures pourrait. Pour faciliter le portage des changements d'emplacement des fichiers, nous recommandent autant de modifications que possible en amont d'AOSP (après leur transfert vers Android 11 ou refactorisation des extensions propriétaires à utiliser des API Android formelles ou des extensions HAL du fournisseur pour les démêler du code AOSP.

Format du module

Le module Wi-Fi (com.android.wifi) est Format APEX. Il est compatible avec les appareils fonctionnant sous Android 11 ou version ultérieure. Le fichier APEX inclut les composants suivants.

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

Dépendances des modules

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

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

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

Personnalisation

Le module Wi-Fi n'est pas compatible avec la personnalisation directe, mais vous pouvez personnaliser à l'aide de superpositions de ressources d'exécution (RRO) ou les configurations d'opérateur.

Personnalisation du Wi-Fi

Figure 2. Personnalisation du module Wi-Fi

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

Utiliser des superpositions de ressources d'exécution

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

Étant donné que device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml définit l'attribut targetPackage sur com.android.wifi.resources et l'attribut L'APK de ressource fourni par le module Wi-Fi comporte un nom de package com.google.android.wifi.resources, vous devez définir les APK en superposition targetPackage vers com.google.android.wifi.resources pour superposer le Wi-Fi configurations.

Migrer le format de stockage de la configuration

Le module Wi-Fi ne peut analyser que le format de stockage de la 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 dans le fichier AOSP lors de la mise à niveau d'un appareil vers une version Android incluant le Wi-Fi de ce module. Les hooks nécessaires pour cette conversion se trouvent dans android.net.wifi.WifiMigration.

Implémentez la conversion de format à l'aide des méthodes suivantes.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Appelé par le module Wi-Fi pour récupérer le contenu du fichier de stockage partagé en Wi-Fi convertis au format AOSP.

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

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Appelé par le module Wi-Fi pour récupérer le contenu du magasin spécifique à l'utilisateur Wi-Fi convertis au format AOSP.

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

Accéder aux API Wi-Fi masquées

Symboles (classes, méthodes, champs, etc.) annotés avec @hide dans le réseau Wi-Fi ne font pas partie de sa surface d'API publique et n'est pas accessible appareils sur lesquels le module est installé. Appareils n'incluant pas le Wi-Fi peut continuer à utiliser les API Wi-Fi @hide en procédant comme suit.

  1. Supprimez les restrictions de visibilité appliquées à framework-wifi à packages/modules/Wifi/framework/Android.bp en modifiant impl_library_visibility sur "public".

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. Modifiez la règle de compilation pour autoriser l'accès de la bibliothèque aux API Wi-Fi @hide. Pour Voici un exemple de règle de compilation pour un élément java_library.

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

    Pour autoriser foo-lib à accéder à la bibliothèque, modifiez la règle de compilation comme suit:

    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 sur libs. L'ordre des dépendances dans l'attribut libs est important.

Accéder aux API de framework caché

Les symboles annotés avec @hide en dehors du module Wi-Fi ne sont pas accessibles par dans le module Wi-Fi. Les appareils qui n'incluent pas le module Wi-Fi peuvent continuez à utiliser les API externes @hide (par exemple, depuis 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, modifiez la sdk_version à core_platform.

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

  3. Vérifiez que le résultat est semblable à 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",
        ],
    }
    

Tests

La suite de tests de compatibilité Android (CTS) vérifie les paramètres du module Wi-Fi en exécutant un ensemble complet de tests CTS sur chaque module de sortie. Vous pouvez également exécuter les tests décrits dans la section Tester, déboguer et régler Wi-Fi.