Wifi

Il modulo Wi-Fi è aggiornabile, il che significa che può ricevere aggiornamenti di funzionalità al di fuori del normale ciclo di rilascio di Android. Questo modulo contiene i seguenti componenti.

Componenti del modulo Wi-Fi

Figura 1. Wi-Fi componenti e l'architettura del modulo

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 della piattaforma ridotta.

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

Confine del modulo

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 fra cui le seguenti.

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

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

  • wificond componente nativo nel system/connectivity/wificond
  • wificond interfaccia (classi 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 versioni future potrebbero. Per ridurre lo sforzo necessario per trasferire le 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 le API Android formali o le estensioni HAL del fornitore per districarle dal codice AOSP.

Formato modulo

Il modulo Wi-Fi ( com.google.android.wifi.apex ) è in APEX formati ed è disponibile per dispositivi con Android 11 o superiore. Il file APEX include i seguenti componenti.

  • Libreria SDK ( framework-wifi.jar )
  • Biblioteca servizio ( service-wifi.jar )
  • OsuLogin APK ( OsuLoginGoogle.apk )
  • Resource APK ( ServiceWifiResourcesGoogle.apk )
  • Certificati WFA

Dipendenze del modulo

Il modulo Wi-Fi dipende dai seguenti componenti.

  • Connettività
  • Telefonia
  • Librerie proto
  • Componenti vari del sistema
  • HAL WiFi
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

Questo interagisce modulo con il quadro utilizzando solo stabile @SystemApi (senza @hide utilizzo API) ed è firmato con una firma di Google al posto di una firma piattaforma.

personalizzazione

Il modulo Wi-Fi non supporta la personalizzazione diretta, ma è possibile personalizzare la configurazione utilizzando sovrapposizioni di risorse di runtime (RROs) o configurazioni carrier.

Personalizzazione Wi-Fi

Personalizzazione modulo mainline Figura 2. Wi-Fi

  • Per piccole personalizzazioni, abilitare o disabilitare impostazioni nel RRO config .
  • Per un maggiore controllo, valori personalizzare configurazione per ogni chiave di configurazione vettore esposto 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 di configurazioni sovrapponibili, fare riferimento a packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml . Per dettagli di configurazione di comportamento, fare riferimento a packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml . Per una sovrapposizione applicazione di esempio, fare riferimento al device/google/coral/rro_overlays/WifiOverlay/ .

Poiché il device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml gruppi di file il targetPackage attributo al com.android.wifi.resources e l'APK risorsa erogata dal modulo Wi-Fi ha il nome del pacchetto com.google.android.wifi.resources , è necessario impostare la sovrapposizione APK targetPackage a com.google.android.wifi.resources di sovrapporre le configurazioni Wi-Fi con successo.

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 modificato in precedenza il formato di archiviazione della configurazione Wi-Fi (che include l'elenco di reti salvate dell'utente), devi convertire tali dati nel formato AOSP quando aggiorni un dispositivo a qualsiasi versione Android che include il modulo Wi-Fi. I ganci necessari per questa conversione sono nella android.net.wifi.WifiMigration classe.

Implementare la conversione del formato nei seguenti metodi.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

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

    • Questi file sono stati in precedenza (in Android 10) memorizzato nella /data/misc/wifi cartella sul dispositivo.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Richiamato dal modulo Wi-Fi per recuperare i contenuti del file di archivio Wi-Fi specifici dell'utente che sono stati convertiti in formato AOSP.

    • Questi file sono stati in precedenza (in Android 10) memorizzati nei /data/misc_ce/<userId>/wifi cartella del dispositivo.

Accesso alle API Wi-Fi nascoste

Simboli (classi, metodi, campi, ecc) annotati con @hide nel modulo Wi-Fi non sono parte della sua superficie API pubblica e non sono accessibili su dispositivi con il modulo installato. I dispositivi che non includono il modulo Wi-Fi può continuare a utilizzare @hide API Wi-Fi utilizzando la seguente procedura.

  1. Rimuovere le restrizioni di visibilità immessi sul framework-wifi a packages/modules/Wifi/framework/Android.bp eliminando impl_library_visibility attributo.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [  // delete this attribute
            ...
        ],
        ...
    }
    
  2. Modificare la regola di accumulo per consentire l'accesso biblioteca @hide API Wi-Fi. Ad esempio, il seguente è una regola di generazione di un java_library .

    java_library {
        name: "foo-lib",
    
        // no sdk_version attribute defined
    
        libs: [
            "dependency1",
            "dependency2",
        ],
    }
    

    Per consentire l'accesso biblioteca per i foo-lib , modificare la regola di compilazione come illustrato di seguito.

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. Assicurarsi che i framework-wifi.impl appare prima di framework nella lista delle libs . L'ordine delle dipendenze in libs attributo è significativo.

Accesso alle API del framework nascoste

Simboli annotati con @hide all'esterno del modulo Wi-Fi non è possibile accedere dal codice all'interno del modulo Wi-Fi. I dispositivi che non includono il modulo Wi-Fi può continuare a utilizzare @hide API esterni (ad esempio, da framework.jar ) in service-wifi apportando le seguenti modifiche al frameworks/opt/net/wifi/service/Android.bp .

  1. In entrambi wifi-service-pre-jarjar e service-wifi , modificare lo sdk_version attributo core_platform .

  2. In entrambi wifi-service-pre-jarjar e service-wifi , add framework e android_system_server_stubs_current al libs attributo.

  3. 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. È inoltre possibile eseguire le prove descritte nel test, debug, e ottimizzazione Wi-Fi .