Il modulo Wi-Fi è aggiornabile, il che significa che può ricevere aggiornamenti delle funzionalità al di fuori del normale ciclo di rilascio di Android. Questo modulo contiene i seguenti componenti.
Figura 1. Componenti e architettura del modulo Wi-Fi
Il modulo Wi-Fi offre i seguenti vantaggi.
Gli utenti finali usufruiscono di un'esperienza Wi-Fi coerente sui dispositivi Android e di correzioni dei problemi di interoperabilità tramite gli aggiornamenti dei moduli.
Gli sviluppatori di app beneficiano di una riduzione della frammentazione della piattaforma.
Gli OEM possono soddisfare i requisiti degli operatori e ridurre i costi per le personalizzazioni individuali (in quanto non hanno bisogno di implementazioni diverse degli stessi requisiti in modi diversi).
Limite del modulo per Android 12 e Android 13
packages/modules/Wififrameworkjava/android/net/wifi(file daframeworks/base/wifi/java)
tests/android/net/wifi(file daframeworks/base/wifi/tests)
aidl-export/api/Android.bp
service/java/com/android/server/wifi(file daframeworks/opt/net/wifi/service/java)
tests/com/android/server/wifi(file daframeworks/opt/net/wifi/tests)
proto/Android.bpproguard.flagswifi.rc
OsuLogin/(file daframeworks/base/packages/OsuLogin)ServiceResources/(novità di Android 12, il manifest dell'APK di overlay è archiviato qui)res/(novità di Android 11, le configurazioni Wi-Fi estratte daframeworks/base/core/res/res)AndroidManifest.xmlAndroid.bp
WifiDialog/(novità di Android 13, l'app per avviare le finestre di dialogo utente richieste dal servizio è archiviata qui)src/com/android/wifi/dialog(contiene l'attività da cui vengono avviate le finestre di dialogo)
AndroidManifest.xmlAndroid.bp
Le directory precedenti contengono anche codice che rimane al di fuori del componente di sistema modulare e nella sua posizione attuale, ad esempio:
wificond interface(classi nel pacchettoandroid.net.wifi.nl80211, ad esempioWifiNl80211Manager)- App di overlay delle risorse di esempio
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Gli OEM possono utilizzare i comandi di esempio per spostare le patch dalle directory del progetto originale alla nuova directory del progetto.
Spostare una patch da frameworks/base/wifi
Generare il file patch in root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txtApplicare il file patch a root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txtSpostare una patch da frameworks/opt/net/wifi
Per spostare la patch da frameworks/opt/net/wifi, sono necessari passaggi complessi perché la gerarchia delle directory è stata modificata durante la migrazione.
In frameworks/opt/net/wifi, dividi il commit in due commit, uno per service/ e uno per tests/.
Eseguire la migrazione del 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
Generare due file di patch di commit
git format-patch -1 service-commit --stdout > service-patch.txtgit format-patch -1 test-commit --stdout > test-patch.txt
Applicare le due patch a packages/modules/Wifi
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
Unire i due commit in un unico commit
git rebase -iModifica l'operazione del secondo commit in squash.
Modifica il messaggio di commit in base alle esigenze.
Limite del modulo per Android 11
Il servizio Wi-Fi continua a essere eseguito all'interno del processo del servizio di sistema. Il modulo Wi-Fi include tutto il codice in packages/modules/Wifi, inclusi i seguenti elementi.
- Classi SDK e di servizio per
WifiService,WifiP2pService,WifiAwareService,WifiScannerServiceeWifiRttService OsuLoginServiceWifiResources
Il modulo esclude i seguenti componenti, che rimangono parte della build AOSP dell'OEM.
- Componente nativo
wificondinsystem/connectivity/wificond - Interfaccia
wificond(classi nel pacchettoandroid.net.wifi.nl80211, ad esempioWifiNl80211Manager) android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Android 11 non sposta i file, ma le release future potrebbero farlo. Per ridurre l'impegno necessario per il porting delle modifiche alla posizione dei file, ti consigliamo di eseguire l'upstream di quante più modifiche possibili ad AOSP (dopo averle portate ad Android 11 o aver eseguito il refactoring delle estensioni proprietarie per utilizzare le API Android formali o le estensioni HAL del fornitore per separarle dal codice AOSP.
Formato del modulo
Il modulo Wi-Fi (com.android.wifi) è in
formato APEX ed è disponibile per i dispositivi
con Android 11 o versioni successive. Il file APEX include i seguenti componenti.
- Libreria SDK (
framework-wifi.jar) - Libreria di servizi (
service-wifi.jar) - APK OsuLogin (
OsuLoginGoogle.apk) - APK delle risorse (
ServiceWifiResourcesGoogle.apk) - Certificati WFA
Dipendenze del modulo
Il modulo Wi-Fi dipende dai seguenti componenti.
- Connettività
- Telefonia
- Librerie di protocolli
- Componenti di sistema vari
- HAL Wi-Fi
wificondbouncycastleksoap2libnanohttpd
Questo modulo interagisce con il framework utilizzando solo @SystemApi stabile (nessun utilizzo di API @hide) e viene firmato con una firma Google anziché con una firma della piattaforma.
Personalizzazione
Il modulo Wi-Fi non supporta la personalizzazione diretta, ma puoi personalizzare la configurazione utilizzando gli overlay delle risorse di runtime (RRO) o le configurazioni dell'operatore.
Figura 2. Personalizzazione del modulo Wi-Fi
- Per le personalizzazioni di piccole dimensioni, attiva o disattiva le impostazioni in
configRRO. - Per un maggiore controllo, personalizza i valori di configurazione per qualsiasi chiave di configurazione dell'operatore esposta come
@SystemAPI.
Utilizzare gli overlay delle risorse di runtime
Puoi personalizzare il modulo Wi-Fi sostituendo le configurazioni predefinite utilizzando gli RRO. Per un elenco delle configurazioni sovrapponibili, consulta packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml.
Per i dettagli sul comportamento della configurazione, consulta packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml.
Per un'app di overlay di esempio, consulta device/google/coral/rro_overlays/WifiOverlay/.
Poiché il file device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml imposta l'attributo targetPackage su com.android.wifi.resources e l'APK delle risorse fornito dal modulo Wi-Fi ha il nome del pacchetto com.google.android.wifi.resources, devi impostare targetPackage degli APK di overlay su com.google.android.wifi.resources per sovrapporre correttamente le configurazioni Wi-Fi.
Eseguire la migrazione del formato di archiviazione della configurazione
Il modulo Wi-Fi può analizzare solo il formato di archiviazione della configurazione Wi-Fi AOSP. Se in precedenza hai modificato il formato di archiviazione della configurazione Wi-Fi (che include l'elenco delle reti salvate dall'utente), devi convertire questi dati nel formato AOSP quando esegui l'upgrade di un dispositivo a una release di Android che include il modulo Wi-Fi. Gli hook necessari per questa conversione si trovano nella classe android.net.wifi.WifiMigration.
Implementa la conversione del formato nei seguenti metodi.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)Richiamato dal modulo Wi-Fi per recuperare i contenuti del file di archiviazione condivisa Wi-Fi convertiti nel formato AOSP.
Questi file erano precedentemente (in Android 10) archiviati nella cartella
/data/misc/wifidel dispositivo.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)Richiamato dal modulo Wi-Fi per recuperare i contenuti del file di archiviazione specifici dell'utente Wi-Fi convertiti nel formato AOSP.
Questi file erano precedentemente (in Android 10) archiviati nella
/data/misc_ce/<userId>/wificartella del dispositivo.
Accedere alle API Wi-Fi nascoste
I simboli (classi, metodi, campi e così via) annotati con @hide nel modulo Wi-Fi non fanno parte della sua superficie API pubblica e non sono accessibili sui dispositivi con il modulo installato. I dispositivi che non includono il modulo Wi-Fi possono continuare a utilizzare le API Wi-Fi @hide seguendo questi passaggi.
Rimuovi le restrizioni di visibilità applicate a
framework-wifiinpackages/modules/Wifi/framework/Android.bpmodificando l'attributoimpl_library_visibilityin public.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }Modifica la regola di build per consentire l'accesso alla libreria alle API Wi-Fi
@hide. Di seguito è riportata una regola di build per unajava_library.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }Per consentire l'accesso alla libreria per
foo-lib, modifica la regola di build come segue:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }Assicurati che
framework-wifi.implvenga visualizzato prima diframeworknell'elenco dilibs. L'ordine delle dipendenze nell'attributolibsè significativo.
Accedere alle API del framework nascoste
Il codice all'interno del modulo Wi-Fi non può accedere ai simboli annotati con @hide al di fuori del modulo Wi-Fi. I dispositivi che non includono il modulo Wi-Fi possono continuare a utilizzare le API esterne @hide (ad esempio, da framework.jar) in service-wifi apportando le seguenti modifiche a frameworks/opt/net/wifi/service/Android.bp.
In entrambi
wifi-service-pre-jarjareservice-wifi, modifica l'attributosdk_versionincore_platform.In entrambi
wifi-service-pre-jarjareservice-wifi, aggiungiframeworkeandroid_system_server_stubs_currentall'attributolibs.Verifica che il risultato sia simile al seguente esempio di codice.
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", ], }
Test
Android Compatibility Test Suite (CTS) verifica le funzionalità del modulo Wi-Fi eseguendo un set completo di test CTS su ogni release del modulo. Puoi anche eseguire i test descritti in Testare, eseguire il debug e ottimizzare il Wi-Fi.