Wi-Fi

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 le seguenti informazioni: componenti.

Componenti del modulo Wi-Fi

Figura 1. Componenti e architettura dei moduli 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 ottengono una riduzione della frammentazione della piattaforma.

  • Gli OEM possono soddisfare i requisiti degli operatori riducendo al contempo i costi per personalizzazioni individuali (poiché non necessitano di implementazioni diverse dei gli stessi requisiti in modi diversi).

Limite dei moduli per Android 12 e Android 13

  • packages/modules/Wifi
    • framework
      • java/
        • android/net/wifi (file da frameworks/base/wifi/java)
      • tests/
        • android/net/wifi (file da frameworks/base/wifi/tests)
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi (file da frameworks/opt/net/wifi/service/java)
      • tests/
        • com/android/server/wifi (file da frameworks/opt/net/wifi/tests)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (file da frameworks/base/packages/OsuLogin)
    • ServiceResources/ (novità di Android 12, overlay Il file manifest dell'APK è memorizzato qui).
      • res/ (novità di Android 11, configurazioni Wi-Fi estratti da frameworks/base/core/res/res)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (novità dell'app Android 13 per le finestre di dialogo dell'utente richieste dal servizio sono memorizzate qui.)
      • src/
        • com/android/wifi/dialog (contiene l'attività in cui sono presenti le finestre di dialogo avviato da)
      • AndroidManifest.xml
      • Android.bp

Le directory precedenti contengono anche codice che rimane al di fuori del componente del sistema modulare e nel suo posizione attuale, ad esempio:

  • wificond interface (classi nel pacchetto android.net.wifi.nl80211, per esempio, WifiNl80211Manager)
  • Esempio di app overlay risorse
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Gli OEM possono usare i comandi di esempio per spostare le patch dalla directory del progetto originale alla nuova directory del progetto.

Spostare una patch da framework/base/Wi-Fi

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

Spostare una patch da framework/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

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

Riunisci i due commit in un commit

git rebase -i

Cambia l'operazione del secondo commit in squash.

Modifica il messaggio di commit in base alle tue esigenze.

Limite dei moduli per Android 11

L'esecuzione del servizio Wi-Fi continua all'interno del processo del servizio di sistema. Il Wi-Fi include tutto il codice in packages/modules/Wifi, incluso il seguente.

  • SDK e classi di servizio per WifiService, WifiP2pService, WifiAwareService, WifiScannerService e WifiRttService
  • OsuLogin
  • ServiceWifiResources

Il modulo esclude i seguenti componenti, che rimangono parte dello stato dell'OEM la build AOSP.

  • wificond componente nativo in system/connectivity/wificond
  • Interfaccia wificond (classi nel pacchetto android.net.wifi.nl80211, per esempio, WifiNl80211Manager)
  • 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. Per ridurre l'impegno richiesto per la portabilità delle modifiche alle posizioni dei file, consigliamo di eseguire l'upstream del maggior numero possibile di modifiche ad AOSP (dopo averle portate su Android 11 o estensioni proprietarie di refactoring da usare 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 della risorsa (ServiceWifiResourcesGoogle.apk)
  • Certificati WFA

Dipendenze del modulo

Il modulo Wi-Fi dipende dai seguenti componenti.

  • Connettività
  • Telefonia
  • Librerie protocollo
  • Componenti di sistema vari
  • 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 utilizzando gli overlay delle risorse di runtime (RRO) o configurazioni dell'operatore.

Personalizzazione del Wi-Fi

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 eseguendo l'override delle configurazioni predefinite utilizzando gli RRO. Per un elenco di configurazioni sovrapponibili, packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml. Per maggiori 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é device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml imposta l'attributo targetPackage su com.android.wifi.resources, mentre il L'APK di risorse fornito dal modulo Wi-Fi ha un nome pacchetto com.google.android.wifi.resources, devi impostare gli APK overlay Da targetPackage a com.google.android.wifi.resources per sovrapporre la rete Wi-Fi configurazioni.

Esegui la migrazione del formato di archiviazione della configurazione

Il modulo Wi-Fi è in grado di 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 android.net.wifi.WifiMigration class.

Implementa la conversione del formato nei seguenti metodi.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Richiamato dal modulo Wi-Fi per recuperare i contenuti del file dello store condiviso sul Wi-Fi che sono stati convertiti in formato AOSP.

    • Questi file sono stati archiviati precedentemente (in Android 10) nell'/data/misc/wifi cartella 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 Android 10, questi file venivano archiviati in precedenza nell'account /data/misc_ce/<userId>/wifi cartella sul dispositivo.

Accedere alle API Wi-Fi nascoste

Simboli (classi, metodi, campi e così via) annotati con @hide nella rete Wi-Fi non fanno parte della piattaforma API pubblica e non sono accessibili su dispositivi con il modulo installato. Dispositivi che non includono il Wi-Fi può continuare a utilizzare le API Wi-Fi di @hide svolgendo i passaggi che seguono.

  1. Rimuovi le limitazioni di visibilità impostate su framework-wifi alle packages/modules/Wifi/framework/Android.bp modificando impl_library_visibility al pubblico.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. Modifica la regola di build per consentire l'accesso alla libreria di API Wi-Fi di @hide. Per ad esempio, quella che segue è una regola di build per un elemento java_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",
        ],
    }
    
  3. Assicurati che framework-wifi.impl appaia prima di framework nell'elenco di libs. L'ordine delle dipendenze nell'attributo libs è significativo.

Accedi alle API del framework nascoste

I simboli con l'indicazione @hide al di fuori del modulo Wi-Fi non sono accessibili a nel modulo Wi-Fi. I dispositivi che non includono il modulo Wi-Fi possono continuare a utilizzare @hide API esterne (ad esempio di framework.jar) in service-wifi apportando le seguenti modifiche a frameworks/opt/net/wifi/service/Android.bp.

  1. In entrambi wifi-service-pre-jarjar e service-wifi, modifica l'attributo sdk_version in core_platform.

  2. In sia wifi-service-pre-jarjar che in service-wifi, aggiungi framework e android_system_server_stubs_current all'attributo libs.

  3. 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 suite per il test di compatibilità Android (Android Compatibility Test Suite, CTS) verifica la conformità del modulo Wi-Fi l'esecuzione di una serie completa di test CTS su ogni modulo, . Puoi anche eseguire i test descritti in Test, debug e ottimizzazione Wi-Fi.