Il modulo Wi-Fi è aggiornabile, il che significa che può ricevere aggiornamenti alle 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 ottengono un'esperienza Wi-Fi coerente su tutti i dispositivi Android e risolvono i problemi di interoperabilità tramite gli aggiornamenti dei moduli.
Gli sviluppatori di app ottengono una frammentazione ridotta della piattaforma.
Gli OEM possono soddisfare i requisiti del vettore riducendo al tempo stesso i costi per le personalizzazioni individuali (poiché non necessitano di implementazioni diverse degli stessi requisiti in modi diversi).
Confini del modulo per Android 12 e Android 13
-
packages/modules/Wifi
-
framework
-
java/
-
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.bp
-
proguard.flags
-
wifi.rc
-
-
OsuLogin/
(file daframeworks/base/packages/OsuLogin
) -
ServiceResources/
(novità in Android 12, il manifest dell'APK overlay è archiviato qui)-
res/
(novità in Android 11, configurazioni Wi-Fi estratte daframeworks/base/core/res/res
) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(la novità dell'app Android 13 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.xml
-
Android.bp
-
-
Le directory di cui sopra contengono anche codice che rimane all'esterno del componente del sistema modulare e nella sua posizione attuale, ad esempio:
-
wificond interface
(classi nel pacchettoandroid.net.wifi.nl80211
, ad esempioWifiNl80211Manager
) - Applicazione di esempio per la sovrapposizione delle risorse
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
Gli OEM possono utilizzare i comandi di esempio per spostare le patch dalle directory del progetto originale alla nuova directory del progetto.
Spostamento di una patch da framework/base/wifi
Generazione del file di patch in root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Applicazione del file patch a root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Spostamento di una patch da frameworks/opt/net/wifi
Per spostare la patch da frameworks/opt/net/wifi
sono necessari passaggi complessi poiché la gerarchia delle directory è stata modificata durante la migrazione.
In frameworks/opt/net/wifi
, dividere il commit in due commit, uno per service/
e uno per tests/
.
Migrazione del 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
Generazione di due file di patch di commit
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Applicazione delle due patch a pacchetti/moduli/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Ricomporre i due commit in un unico commit
git rebase -i
Cambia l'operazione del secondo commit in squash
.
Modifica il messaggio di commit come appropriato.
Confini del modulo per Android 11
Il servizio Wi-Fi continua a essere eseguito all'interno del processo Servizio di sistema. Il modulo Wi-Fi include tutto il codice in packages/modules/Wifi
incluso quanto segue.
- SDK e classi di servizio per
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
eWifiRttService
-
OsuLogin
-
ServiceWifiResources
Il modulo esclude i seguenti componenti, che rimangono parte della build AOSP dell'OEM.
- Componente nativo
wificond
nelsystem/connectivity/wificond
- interfaccia
wificond
(classi nel pacchettoandroid.net.wifi.nl80211
, ad esempioWifiNl80211Manager
) -
android.net.wifi.SoftApConfToXmlMigrationUtil
-
android.net.wifi.WifiNetworkScoreCache
-
android.net.wifi.WifiMigration
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
Android 11 non sposta i file, ma le versioni future potrebbero farlo. Per ridurre lo sforzo richiesto dal trasferimento delle modifiche alla posizione dei file, consigliamo di eseguire l'upstream del maggior numero possibile di modifiche su AOSP (dopo averle trasferite su Android 11 o aver effettuato il refactoring delle estensioni proprietarie per utilizzare API Android formali o 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 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 di OsuLogin (
OsuLoginGoogle.apk
) - APK della risorsa (
ServiceWifiResourcesGoogle.apk
) - Certificati WFA
Dipendenze del modulo
Il modulo Wi-Fi dipende dai seguenti componenti.
- Connettività
- Telefonia
- Protobiblioteche
- Componenti vari del sistema
- HAL WiFi
-
wificond
-
bouncycastle
-
ksoap2
-
libnanohttpd
Questo modulo interagisce con il framework utilizzando solo @SystemApi
stabile (nessun utilizzo dell'API @hide
) ed è firmato con una firma di 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 piccole personalizzazioni, abilitare o disabilitare le impostazioni nella
config
RRO. - Per un maggiore controllo, personalizza i valori di configurazione per qualsiasi chiave di configurazione dell'operatore esposta come
@SystemAPI
.
Utilizzo degli overlay delle risorse di runtime
È possibile personalizzare il modulo Wi-Fi sovrascrivendo le configurazioni predefinite utilizzando gli RRO. Per un elenco delle configurazioni sovrapponibili, fare riferimento a packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
. Per i dettagli sul comportamento di configurazione, fare riferimento a packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
. Per un'applicazione overlay di esempio, fai riferimento a 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 della risorsa fornito dal modulo Wi-Fi ha il nome del pacchetto com.google.android.wifi.resources
, devi impostare l'APK di sovrapposizione targetPackage
su com.google.android.wifi.resources
per sovrapporre correttamente le configurazioni Wi-Fi.
Migrazione del formato di archiviazione della configurazione
Il modulo Wi-Fi può analizzare solo il formato di archiviazione della configurazione Wi-Fi AOSP. Se hai precedentemente modificato il formato di archiviazione della configurazione Wi-Fi (che include l'elenco delle reti salvate dell'utente), devi convertire tali dati nel formato AOSP quando aggiorni un dispositivo a qualsiasi versione Android che includa il modulo Wi-Fi. Gli hook necessari per questa conversione si trovano nella classe android.net.wifi.WifiMigration
.
Implementare la conversione del formato nei seguenti metodi.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
Richiamato dal modulo Wi-Fi per recuperare il contenuto del file dell'archivio condiviso Wi-Fi che è stato convertito in formato AOSP.
Questi file erano precedentemente (in Android 10) archiviati nella cartella
/data/misc/wifi
sul dispositivo.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Richiamato dal modulo Wi-Fi per recuperare il contenuto del file di archivio specifico dell'utente Wi-Fi che è stato convertito in formato AOSP.
Questi file erano precedentemente (in Android 10) archiviati nella cartella
/data/misc_ce/<userId>/wifi
sul dispositivo.
Accesso alle API Wi-Fi nascoste
I simboli (classi, metodi, campi, ecc.) annotati con @hide
nel modulo Wi-Fi non fanno parte della sua superficie API pubblica e non è possibile accedervi 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 i passaggi seguenti.
Rimuovere le restrizioni di visibilità imposte su
framework-wifi
inpackages/modules/Wifi/framework/Android.bp
modificando l'attributoimpl_library_visibility
in public.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Modificare la regola di compilazione per consentire l'accesso alla libreria
@hide
API Wi-Fi. Ad esempio, quella seguente è una regola di compilazione perjava_library
.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
Per consentire l'accesso alla libreria per
foo-lib
, modificare la regola di compilazione come mostrato di seguito.java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Assicurati che
framework-wifi.impl
appaia prima diframework
nell'elenco dellelibs
. L'ordine delle dipendenze nell'attributolibs
è significativo.
Accesso alle API del framework nascosto
Non è possibile accedere ai simboli annotati con @hide
all'esterno del modulo Wi-Fi tramite codice all'interno del modulo Wi-Fi. I dispositivi che non includono il modulo Wi-Fi possono continuare a utilizzare @hide
API esterne (ad esempio, da framework.jar
) in service-wifi
apportando le seguenti modifiche a frameworks/opt/net/wifi/service/Android.bp
Sia in
wifi-service-pre-jarjar
cheservice-wifi
, modifica l'attributosdk_version
incore_platform
.Sia in
wifi-service-pre-jarjar
cheservice-wifi
, aggiungiframework
eandroid_system_server_stubs_current
all'attributolibs
.Verificare 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 la funzionalità del modulo Wi-Fi eseguendo una serie completa di test CTS su ogni versione del modulo. Puoi anche eseguire i test descritti in Test, debug e ottimizzazione del Wi-Fi .