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.
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 solutions aux 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 plateforme.
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 du module pour Android 12 et Android 13
-
packages/modules/Wifi
-
framework
-
java/
-
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.bp
-
proguard.flags
-
wifi.rc
-
-
OsuLogin/
(fichiers deframeworks/base/packages/OsuLogin
) -
ServiceResources/
(nouveau dans Android 12, le manifeste APK Overlay est stocké ici)-
res/
(nouveau dans Android 11, configurations Wi-Fi extraites deframeworks/base/core/res/res
) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(la nouveauté de l'application Android 13 pour 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.xml
-
Android.bp
-
-
Les répertoires ci-dessus contiennent également du code qui reste en dehors du composant du système modulaire et à son emplacement actuel, par exemple :
-
wificond interface
(classes du packageandroid.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 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/
.
Migration du 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 correctifs 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 patchs 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
Remplacez l'opération du deuxième commit par squash
.
Modifiez le message de validation selon vos besoins.
Limite du module pour Android 11
Le service Wi-Fi continue de s'exécuter dans le processus du service système. Le module Wi-Fi comprend tous les codes des packages/modules/Wifi
y compris les suivants.
- SDK et classes de service pour
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
etWifiRttService
-
OsuLogin
-
ServiceWifiResources
Le module exclut les composants suivants, qui font toujours partie de la version AOSP de l'OEM.
- composant natif
wificond
danssystem/connectivity/wificond
- Interface
wificond
(classes du packageandroid.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 versions futures pourraient le faire. Pour réduire les efforts impliqués dans le portage des modifications d'emplacement de fichier, nous recommandons en amont autant de modifications que possible à AOSP (après les avoir portées sur Android 11 ou après avoir refactorisé les extensions propriétaires pour utiliser des API Android formelles ou des extensions HAL de fournisseurs pour les dissocier 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
- Bibliothèques de prototypes
- Divers composants du système
- HAL WiFi
-
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 plateforme.
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 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/
.
Parce 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 le targetPackage
APKS de superposition sur com.google.android.wifi.resources
pour superposer correctement les configurations Wi-Fi.
Migration du format de stockage de configuration
Le module Wi-Fi peut analyser uniquement 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 lors de la mise à niveau d'un appareil vers une version Android incluant 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 (sous Android 10) stockés dans le dossier
/data/misc/wifi
de 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 (sous Android 10) stockés dans le dossier
/data/misc_ce/<userId>/wifi
de 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 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 @hide
Wi-Fi en suivant les étapes suivantes.
Supprimez les restrictions de visibilité placées sur
framework-wifi
danspackages/modules/Wifi/framework/Android.bp
en modifiant l'attributimpl_library_visibility
en public.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Modifiez la règle de construction pour autoriser l'accès à la bibliothèque
@hide
Wi-Fi API. Par exemple, ce qui suit est une règle de construction 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 construction comme indiqué ci-dessous.java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Assurez-vous que
framework-wifi.impl
apparaît avantframework
dans la liste deslibs
. L'ordre des dépendances dans l'attributlibs
est significatif.
Accéder aux API de framework cachées
Les symboles annotés avec @hide
en dehors 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, from framework.jar
) dans service-wifi
en apportant les modifications suivantes à frameworks/opt/net/wifi/service/Android.bp
.
Dans
wifi-service-pre-jarjar
etservice-wifi
, remplacez l'attributsdk_version
parcore_platform
.Dans
wifi-service-pre-jarjar
etservice-wifi
, ajoutezframework
etandroid_system_server_stubs_current
à l'attributlibs
.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 .