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.
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é grâce aux 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 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, Overlay le fichier manifeste de l'APK est stocké ici)res/
(nouveau dans Android 11, configurations Wi-Fi) extrait deframeworks/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é à partir de laquelle les boîtes de dialogue sont lancées)
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 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 du projet.
Déplacer un correctif depuis les frameworks/base/wifi
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
Remplacez l'opération du deuxième commit par squash
.
Modifiez le message de commit si nécessaire.
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.
- Classes de SDK et de services pour
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
etWifiRttService
OsuLogin
ServiceWifiResources
Le module n'inclut pas les composants suivants, qui font toujours partie de la protection Build AOSP.
wificond
composant natif danssystem/connectivity/wificond
- Interface
wificond
(classes du packageandroid.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 comprend 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 des modules
Le module Wi-Fi dépend des composants suivants.
- Connectivité
- Téléphonie
- Bibliothèques Proto
- Divers composants 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.
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 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 l'APK de superposition targetPackage
sur com.google.android.wifi.resources
pour superposer 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 de réseaux enregistrés de l'utilisateur), vous devez convertir ces données au format AOSP lorsque vous mettez à niveau un appareil vers une version Android incluant le module Wi-Fi. 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
Les symboles (classes, méthodes, champs, etc.) annotés avec @hide
dans le module Wi-Fi ne font pas partie de la surface de l'API publique et ne sont pas accessibles sur les appareils sur lesquels le module est installé. Les appareils qui n'incluent pas de module Wi-Fi peuvent continuer à utiliser les API Wi-Fi @hide
en procédant comme suit.
Supprimez les restrictions de visibilité appliquées à
framework-wifi
àpackages/modules/Wifi/framework/Android.bp
en modifiantimpl_library_visibility
sur "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 de la bibliothèque aux API Wi-Fi
@hide
. Pour Voici un exemple de règle de compilation pour un élémentjava_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", ], }
Assurez-vous que
framework-wifi.impl
apparaît avantframework
dans la liste surlibs
. L'ordre des dépendances dans l'attributlibs
est 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
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
Dans
wifi-service-pre-jarjar
etservice-wifi
, modifiez lasdk_version
àcore_platform
.Dans
wifi-service-pre-jarjar
etservice-wifi
à la fois, ajoutezframework
etandroid_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
La suite de tests de compatibilité Android (CTS) vérifie l'intégrité 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.