Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Wifi

El módulo Wi-Fi es actualizable, lo que significa que puede recibir actualizaciones de la funcionalidad fuera del ciclo normal de lanzamiento de Android. Este módulo contiene los siguientes componentes.

Componentes del módulo Wi-Fi

Figura 1. Arquitectura y componentes del módulo Wi-Fi

El módulo Wi-Fi ofrece los siguientes beneficios.

  • Los usuarios finales obtienen una experiencia de Wi-Fi uniforme en todos los dispositivos Android y solucionan problemas de interoperabilidad a través de actualizaciones de módulos.

  • Los desarrolladores de aplicaciones obtienen una menor fragmentación de la plataforma.

  • Los OEM pueden cumplir con los requisitos del operador y al mismo tiempo reducir los costos de personalizaciones individuales (ya que no necesitan diferentes implementaciones de los mismos requisitos de diferentes maneras).

Límite del módulo

El servicio Wi-Fi continúa ejecutándose dentro del proceso de Servicio del sistema. El módulo Wi-Fi incluye todo el código en packages/modules/Wifi incluido lo siguiente.

  • SDK y clases de servicio para WifiService , WifiP2pService , WifiAwareService , WifiScannerService y WifiRttService
  • OsuLogin
  • ServiceWifiResources

El módulo excluye los siguientes componentes, que siguen siendo parte de la compilación AOSP del OEM.

  • wificond nativo de wificond en el system/connectivity/wificond
  • interfaz wificond (clases en el paquete android.net.wifi.nl80211 , por ejemplo, WifiNl80211Manager )
  • android.net.wifi.SoftApConfToXmlMigrationUtil
  • android.net.wifi.WifiNetworkScoreCache
  • android.net.wifi.WifiMigration
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Android 11 no mueve archivos, pero las versiones futuras podrían hacerlo. Para reducir el esfuerzo involucrado en la transferencia de cambios de ubicación de archivos, recomendamos la mayor cantidad de cambios posibles a AOSP (después de migrarlos a Android 11 o refactorizar extensiones patentadas para usar API formales de Android o extensiones HAL del proveedor para separarlas del código AOSP.

Formato del módulo

El módulo Wi-Fi ( com.google.android.wifi.apex ) está en formato APEX y está disponible para dispositivos con Android 11 o superior. El archivo APEX incluye los siguientes componentes.

  • Biblioteca SDK ( framework-wifi.jar )
  • Biblioteca de service-wifi.jar ( service-wifi.jar )
  • OsuLogin APK ( OsuLoginGoogle.apk )
  • Recurso APK ( ServiceWifiResourcesGoogle.apk )
  • Certificados WFA

Dependencias del módulo

El módulo Wi-Fi depende de los siguientes componentes.

  • Conectividad
  • Telefonía
  • Bibliotecas de proto
  • Componentes misceláneos del sistema
  • WiFi HAL
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

Este módulo interactúa con el marco utilizando solo @SystemApi estable (sin uso de API @hide ) y está firmado con una firma de Google en lugar de una firma de plataforma.

Personalización

El módulo Wi-Fi no admite la personalización directa, pero puede personalizar la configuración utilizando superposiciones de recursos en tiempo de ejecución (RRO) o configuraciones de operador.

Personalización de Wi-Fi

Figura 2. Personalización del módulo de la línea principal de Wi-Fi

  • Para pequeñas personalizaciones, habilite o deshabilite la configuración en la config RRO.
  • Para mayor control, personalice los valores de configuración para cualquier clave de configuración de operador expuesta como @SystemAPI .

Usar superposiciones de recursos en tiempo de ejecución

Puede personalizar el módulo Wi-Fi anulando las configuraciones predeterminadas mediante RRO. Para obtener una lista de configuraciones superpuestas, consulte packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml . Para obtener detalles sobre el comportamiento de la configuración, consulte packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml . Para ver una aplicación de superposición de muestra, consulte device/google/coral/rro_overlays/WifiOverlay/ .

Debido a que el archivo device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml establece el atributo targetPackage en com.android.wifi.resources y el APK de recurso entregado por el módulo Wi-Fi tiene el nombre de paquete com.google.android.wifi.resources , debe establecer la superposición APKS targetPackage en com.google.android.wifi.resources para superponer las configuraciones de Wi-Fi correctamente.

Migrar el formato de almacenamiento de la configuración

El módulo de Wi-Fi solo puede analizar el formato de almacenamiento de configuración de Wi-Fi de AOSP. Si ha modificado previamente el formato de almacenamiento de la configuración de Wi-Fi (que incluye la lista de red guardada del usuario), debe convertir esos datos al formato AOSP cuando actualice un dispositivo a cualquier versión de Android que incluya el módulo Wi-Fi. Los ganchos necesarios para esta conversión están en la clase android.net.wifi.WifiMigration .

Implemente la conversión de formato en los siguientes métodos.

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Invocado por el módulo Wi-Fi para recuperar el contenido del archivo de la tienda compartida Wi-Fi que se ha convertido al formato AOSP.

    • Estos archivos se almacenaron previamente (en Android 10) en la carpeta /data/misc/wifi del dispositivo.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Invocado por el módulo Wi-Fi para recuperar el contenido del archivo de tienda específico del usuario de Wi-Fi que se ha convertido al formato AOSP.

    • Estos archivos se almacenaron previamente (en Android 10) en la /data/misc_ce/<userId>/wifi en el dispositivo.

Acceder a API de Wi-Fi ocultas

Los símbolos (clases, métodos, campos, etc.) anotados con @hide en el módulo Wi-Fi no forman parte de su superficie API pública y no se puede acceder a ellos en dispositivos con el módulo instalado. Los dispositivos que no incluyen el módulo Wi-Fi pueden seguir usando las @hide Wi-Fi @hide mediante los siguientes pasos.

  1. Elimine las restricciones de visibilidad colocadas en framework-wifi en packages/modules/Wifi/framework/Android.bp eliminando el atributo impl_library_visibility .

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [  // delete this attribute
            ...
        ],
        ...
    }
    
  2. Cambie la regla de compilación para permitir el acceso a la biblioteca @hide Wi-Fi API. Por ejemplo, la siguiente es una regla de compilación para una java_library .

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

    Para permitir el acceso a la biblioteca para foo-lib , cambie la regla de compilación como se muestra a continuación.

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. Asegúrese de que framework-wifi.impl aparezca antes de framework en la lista de libs . El orden de las dependencias en el atributo libs es significativo.

Acceder a las API de framework ocultas

No se puede acceder a los símbolos anotados con @hide fuera del módulo Wi-Fi mediante código dentro del módulo Wi-Fi. Los dispositivos que no incluyen el módulo Wi-Fi pueden seguir usando @hide API externas (por ejemplo, de framework.jar ) en service-wifi realizando las siguientes modificaciones en frameworks/opt/net/wifi/service/Android.bp .

  1. En tanto wifi-service-pre-jarjar y service-wifi , cambiar el sdk_version atributo a core_platform .

  2. Tanto en wifi-service-pre-jarjar como en service-wifi , agregue framework y android_system_server_stubs_current al atributo libs .

  3. Verifique que el resultado sea similar al siguiente ejemplo de código.

    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",
        ],
    }
    

Pruebas

Android Compatibility Test Suite (CTS) verifica la funcionalidad del módulo Wi-Fi mediante la ejecución de un conjunto completo de pruebas CTS en cada versión del módulo. También puede ejecutar las pruebas descritas en Prueba, depuración y ajuste de Wi-Fi .