Le module Wi-Fi est actualisable, 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.
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 liés aux personnalisations individuelles (car ils n'ont pas besoin d'implémentations différentes des mêmes exigences de différentes manières).
Limite du module pour Android 12 et Android 13
packages/modules/Wififrameworkjava/android/net/wifi(fichiers deframeworks/base/wifi/java)
tests/android/net/wifi(fichiers deframeworks/base/wifi/tests)
aidl-export/api/Android.bp
service/java/com/android/server/wifi(fichiers deframeworks/opt/net/wifi/service/java)
tests/com/android/server/wifi(fichiers deframeworks/opt/net/wifi/tests)
proto/Android.bpproguard.flagswifi.rc
OsuLogin/(fichiers deframeworks/base/packages/OsuLogin)ServiceResources/(nouveau dans Android 12, le fichier manifeste APK de superposition est stocké ici)res/(nouveau dans Android 11, configurations Wi-Fi extraites deframeworks/base/core/res/res)AndroidManifest.xmlAndroid.bp
WifiDialog/(nouveau dans Android 13, l'application permettant de lancer les boîtes de dialogue utilisateur demandées par le service est stockée ici)src/com/android/wifi/dialog(contient l'activité à partir de laquelle les boîtes de dialogue sont lancées)
AndroidManifest.xmlAndroid.bp
Les répertoires précédents contiennent également du code qui reste en dehors du composant système modulaire et à son emplacement actuel, par exemple :
wificond interface(classes dans le packageandroid.net.wifi.nl80211, par exemple,WifiNl80211Manager)- Exemple d'application de superposition de ressources
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_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 frameworks/base/wifi
Générer le fichier correctif dans root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txtAppliquer le fichier correctif à root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txtDé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 un pour tests/.
Migrer le commit HEAD
git reset HEAD^git add service/git commit # Enter your commit message. Call this commit service-commitgit 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.txtgit format-patch -1 test-commit --stdout > test-patch.txt
Appliquer les deux correctifs à packages/modules/Wifi
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
Réduire les deux commits en un seul
git rebase -iModifiez l'opération du deuxième commit en squash.
Modifiez le message de commit comme il convient.
Limite du module pour Android 11
Le service Wi-Fi continue de s'exécuter dans le processus de service système. Le module Wi-Fi inclut tout le code dans packages/modules/Wifi, y compris les éléments suivants.
- Classes SDK et de service pour
WifiService,WifiP2pService,WifiAwareService,WifiScannerServiceetWifiRttService OsuLoginServiceWifiResources
Le module exclut les composants suivants, qui font toujours partie de la compilation AOSP de l'OEM.
- Composant natif
wificonddanssystem/connectivity/wificond - Interface
wificond(classes dans le packageandroid.net.wifi.nl80211, par exemple,WifiNl80211Manager) android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Android 11 ne déplace pas les fichiers, mais les futures versions pourraient le faire. Pour réduire l'effort nécessaire à la migration des modifications d'emplacement des fichiers, nous vous recommandons de transférer autant de modifications que possible vers AOSP (après les avoir transférées vers Android 11 ou avoir refactorisé les extensions propriétaires pour utiliser les API Android formelles ou les extensions HAL du fournisseur afin de les dissocier du code AOSP.
Format du module
Le module Wi-Fi (com.android.wifi) est au format
APEX et est disponible pour 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 ressources (
ServiceWifiResourcesGoogle.apk) - Certificats WFA
Dépendances du module
Le module Wi-Fi dépend des composants suivants.
- Connectivité
- Téléphonie
- Bibliothèques proto
- Composants système divers
- HAL Wi-Fi
wificondbouncycastleksoap2libnanohttpd
Ce module interagit avec le framework en utilisant uniquement des @SystemApi stables (aucune 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.
Figure 2. Personnalisation du module Wi-Fi
- Pour les petites personnalisations, activez ou désactivez les paramètres dans le RRO
config. - Pour plus de contrôle, personnalisez les valeurs de configuration pour n'importe quelle clé de configuration d'opérateur exposée 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 de RRO. Pour obtenir la liste des configurations superposables, 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 obtenir un exemple d'application de superposition, consultez 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 l'APK de ressources fourni par le module Wi-Fi porte le nom de package com.google.android.wifi.resources, vous devez définir le targetPackage des APK de superposition sur com.google.android.wifi.resources pour superposer correctement les configurations Wi-Fi.
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 par l'utilisateur), vous devez convertir ces données au format AOSP lorsque vous mettez à niveau un appareil vers une 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>)Appelé par le module Wi-Fi pour récupérer le contenu du fichier de stockage partagé Wi-Fi qui a été converti au format AOSP.
Ces fichiers étaient auparavant (dans Android 10) stockés dans le dossier
/data/misc/wifide l'appareil.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)Appelé par le module Wi-Fi pour récupérer le contenu du fichier de stockage 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>/wifidossier de l'appareil.
Accéder aux API Wi-Fi masqué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 procédant comme suit.
Supprimez les restrictions de visibilité placées sur
framework-wifidanspackages/modules/Wifi/framework/Android.bpen remplaçant l'attributimpl_library_visibilitypar public.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }Modifiez la règle de compilation pour autoriser l'accès aux API Wi-Fi
@hidede la bibliothèque. Par exemple, voici une règle de compilation pour unejava_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 compilation comme suit :java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }Assurez-vous que
framework-wifi.implapparaît avantframeworkdans la liste deslibs. L'ordre des dépendances dans l'attributlibsest important.
Accéder aux API de framework masquées
Les symboles annotés avec @hide en dehors du module Wi-Fi ne sont pas accessibles par le code du 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.
Dans les deux
wifi-service-pre-jarjaretservice-wifi, remplacez l'attributsdk_versionparcore_platform.Dans les deux
wifi-service-pre-jarjaretservice-wifi, ajoutezframeworketandroid_system_server_stubs_currentà l'attributlibs.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
L'outil Compatibility Test Suite (CTS) Android vérifie les fonctionnalités 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 Tester, déboguer et régler le Wi-Fi.