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 usufruiscono di un'esperienza Wi-Fi coerente su tutti i dispositivi Android e vengono risolti i problemi di interoperabilità tramite gli aggiornamenti dei moduli.
Gli sviluppatori di app riducono la frammentazione delle piattaforme.
Gli OEM possono soddisfare i requisiti degli operatori riducendo al contempo i costi per le personalizzazioni individuali (in quanto non richiedono implementazioni diverse degli stessi requisiti in modi diversi).
Confine 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à di Android 12, il manifest dell'APK dell'overlay è memorizzato qui)res/
(novità di Android 11, configurazioni Wi-Fi estratte daframeworks/base/core/res/res
)AndroidManifest.xml
Android.bp
WifiDialog/
(novità di Android 13: qui viene memorizzata l'app per avviare le finestre di dialogo con l'utente richieste dal servizio).src/
com/android/wifi/dialog
(contiene l'attività da cui vengono avviate le finestre di dialogo)
AndroidManifest.xml
Android.bp
Le directory precedenti contengono anche il codice che rimane al di fuori del componente di sistema modulare e nella sua posizione corrente, ad esempio:
wificond interface
(classi nel pacchettoandroid.net.wifi.nl80211
, ad es.WifiNl80211Manager
)- App di esempio per l'overlay 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.
Spostare una patch da frameworks/base/wifi
Generare il file 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
Spostare 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
, suddividi 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
Generare due file patch di commit
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Applicare le due patch a pacchetti/moduli/Wi-Fi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Combinazione dei due commit in un unico commit
git rebase -i
Modifica l'operazione del secondo commit in squash
.
Modifica il messaggio del commit in base alle esigenze.
Confine del modulo per Android 11
Il servizio Wi-Fi continua a funzionare all'interno del processo del servizio di sistema. Il modulo Wi-Fi include tutto il codice in packages/modules/Wifi
, incluso quanto segue.
- Classi SDK e di servizio per
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
eWifiRttService
OsuLogin
ServiceWifiResources
Il modulo esclude i seguenti componenti, che rimangono parte della compilazione AOSP dell'OEM.
- Componente nativo
wificond
insystem/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 release future potrebbero farlo. Per ridurre lo sforzo necessario per eseguire il porting delle modifiche alla posizione dei file, consigliamo di eseguire il porting il maggior numero possibile di modifiche in AOSP (dopo averle eseguite su Android 11 o aver eseguito il refactoring delle estensioni proprietarie per utilizzare API Android formali o estensioni HAL del fornitore) per slegarle 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 della risorsa (
ServiceWifiResourcesGoogle.apk
) - Certificati WFA
Dipendenze dei moduli
Il modulo Wi-Fi dipende dai seguenti componenti.
- Connettività
- Telefonia
- Librerie proto
- Vari componenti di sistema
- HAL Wi-Fi
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, attiva o disattiva le impostazioni nell'RRO
config
. - 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 ignorando 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 di configurazione, consulta
packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
.
Per un'app 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 di risorse fornito dal modulo Wi-Fi ha il nome del pacchetto
com.google.android.wifi.resources
, devi impostare gli APK di overlay
targetPackage
su com.google.android.wifi.resources
per sovrapporre correttamente le configurazioni Wi-Fi.
Esegui la migrazione del formato dello spazio 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 dell'utente), devi convertire i dati nel formato AOSP
durante l'upgrade di un dispositivo a qualsiasi release di Android che includa 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>)
Viene invocato dal modulo Wi-Fi per recuperare i contenuti dei file dello store condiviso Wi-Fi che sono stati convertiti in formato AOSP.
In precedenza (in Android 10), questi file erano memorizzati nella cartella
/data/misc/wifi
sul dispositivo.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Viene invocato dal modulo Wi-Fi per recuperare i contenuti dei file dello Store specifici per l'utente Wi-Fi che sono stati convertiti in formato AOSP.
In precedenza (in Android 10), questi file erano memorizzati nella
/data/misc_ce/<userId>/wifi
sul 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 API pubblica e non è possibile accedervi sui dispositivi su cui è installato il modulo. I dispositivi che non includono il modulo Wi-Fi possono continuare a utilizzare le API Wi-Fi di @hide
seguendo i passaggi riportati di seguito.
Rimuovi le limitazioni di visibilità applicate a
framework-wifi
inpackages/modules/Wifi/framework/Android.bp
modificando l'attributoimpl_library_visibility
in pubblico.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Modifica la regola di compilazione per consentire l'accesso alla libreria
@hide
API Wi-Fi. Ad esempio, di seguito è riportata una regola di compilazione per unjava_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 compilazione come segue:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Assicurati che
framework-wifi.impl
venga visualizzato prima diframework
nell'elenco dilibs
. L'ordine delle dipendenze nell'attributolibs
è significativo.
Accedere alle API del framework nascoste
I simboli annotati con @hide
al di fuori del modulo Wi-Fi non sono accessibili al codice all'interno del modulo Wi-Fi. I dispositivi che non includono il modulo Wi-Fi possono continuare a utilizzare le API esterne @hide
(ad esempio di framework.jar
) in service-wifi
apportando le seguenti modifiche a frameworks/opt/net/wifi/service/Android.bp
.
In entrambi
wifi-service-pre-jarjar
eservice-wifi
, modifica l'attributosdk_version
incore_platform
.In entrambi
wifi-service-pre-jarjar
eservice-wifi
, aggiungiframework
eandroid_system_server_stubs_current
all'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
La Compatibility Test Suite (CTS) di Android verifica le funzionalità del modulo Wi-Fi eseguendo un insieme 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.