Wi-Fi

El módulo Wi-Fi se puede actualizar, lo que significa que puede recibir actualizaciones para las capacidades. fuera del ciclo normal de actualización de Android. Este módulo contiene lo siguiente o los componentes de la solución.

Componentes del módulo Wi-Fi

Figura 1: Componentes y arquitectura del módulo Wi-Fi

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

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

  • Los desarrolladores de apps obtienen una fragmentación de la plataforma reducida.

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

Límite del módulo para Android 12 y Android 13

  • packages/modules/Wifi
    • framework
      • java/
        • android/net/wifi (archivos de frameworks/base/wifi/java)
      • tests/
        • android/net/wifi (archivos de frameworks/base/wifi/tests)
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi (archivos de frameworks/opt/net/wifi/service/java)
      • tests/
        • com/android/server/wifi (archivos de frameworks/opt/net/wifi/tests)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ (archivos de frameworks/base/packages/OsuLogin)
    • ServiceResources/ (nuevo en Android 12, superposición) el manifiesto del APK se almacena aquí).
      • res/ (nuevo en Android 11, parámetros de configuración de Wi-Fi) se extrajo de frameworks/base/core/res/res)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (nueva en la app para Android 13 para los diálogos de inicio del usuario solicitados por el servicio se almacenan aquí).
      • src/
        • com/android/wifi/dialog (contiene la actividad a la que se adjuntan los diálogos desde)
      • AndroidManifest.xml
      • Android.bp

Los directorios anteriores también contienen código que permanece fuera del componente del sistema modular y en su ubicación actual, por ejemplo:

  • wificond interface (clases en el paquete android.net.wifi.nl80211, para ejemplo, WifiNl80211Manager)
  • Ejemplo de app de superposición de recursos
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Los OEM pueden usar los comandos de muestra para transferir sus parches. de los directorios del proyecto original al directorio del proyecto nuevo.

Traslada un parche de frameworks/base/wifi

Genera el archivo de parche en la raíz, marcos de trabajo, base o Wi-Fi

git format-patch -1 commit --stdout > patch-file.txt

Aplicación del archivo de parche a root/packages/modules/Wifi

git am -p2 --directory=framework/ patch-file.txt

Trasladar un parche de frameworks/opt/net/wifi

Para mover el parche de frameworks/opt/net/wifi, se necesitan pasos complejos porque la jerarquía del directorio se cambió durante la migración.

En frameworks/opt/net/wifi, divide la confirmación en dos, una para service/ y uno para tests/.

Migra la confirmación 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

Genera dos archivos de parche de confirmación

git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt

Aplicación de los dos parches a paquetes/módulos/Wi-Fi

git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt

Cómo volver a agrupar las dos confirmaciones en una sola confirmación

git rebase -i

Cambia la operación de la segunda confirmación a squash.

Edita el mensaje de confirmación según corresponda.

Límite del módulo para Android 11

Se seguirá ejecutando el servicio de Wi-Fi dentro del proceso de servicio del sistema. La red Wi-Fi incluye todo el código de 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 del compilación de AOSP.

  • Componente nativo de wificond en system/connectivity/wificond
  • interfaz wificond (clases en el paquete android.net.wifi.nl80211, para 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 transfiere archivos, pero las versiones futuras podría. Para reducir el esfuerzo necesario para transferir los cambios en la ubicación de los archivos, recomendar ascendentes tantos cambios como sea posible al AOSP (después de transferirlos a Android 11 o la refactorización de extensiones propias para usarlas las APIs de Android formales o las extensiones de HAL del proveedor para desenredarlas del código del AOSP.

Formato del módulo

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

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

Dependencias del módulo

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

  • Conectividad
  • Telefonía
  • Bibliotecas proto
  • Componentes de varios sistemas
  • HAL de Wi-Fi
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

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

Personalización

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

Personalización de Wi-Fi

Figura 2: Personalización del módulo Wi-Fi

  • Para personalizaciones pequeñas, habilita o inhabilita la configuración en config de la RRO.
  • Para tener más control, personaliza los valores de configuración de cualquier clave de configuración de proveedor Se expone como @SystemAPI.

Cómo usar superposiciones de recursos de tiempo de ejecución

Puedes personalizar el módulo Wi-Fi anulando las configuraciones predeterminadas con RRO. Para obtener una lista de las configuraciones que se pueden superponer, consulta packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml Para conocer los detalles del comportamiento de configuración, consulta packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml Para ver un ejemplo de app superpuesta, consulta device/google/coral/rro_overlays/WifiOverlay/

Debido a que device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml configura el atributo targetPackage en com.android.wifi.resources y el el APK de recurso que entrega el módulo Wi-Fi tiene el nombre del paquete com.google.android.wifi.resources, debes establecer los APK de superposición targetPackage a com.google.android.wifi.resources para superponer la red Wi-Fi configuración correctamente.

Migrar el formato de almacenamiento de la configuración

El módulo Wi-Fi solo puede analizar el formato de almacenamiento de la configuración Wi-Fi del AOSP. Si Ya modificaste el formato de almacenamiento de la configuración de Wi-Fi (que incluye la lista de redes guardadas del usuario), debes convertir esos datos al AOSP cuando se actualiza un dispositivo a cualquier versión de Android que incluya la conexión Wi-Fi módulo. Los hooks necesarios para esta conversión se encuentran Clase android.net.wifi.WifiMigration.

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

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Lo invoca el módulo Wi-Fi para recuperar el contenido del archivo del almacén compartido de Wi-Fi que se convirtieron al formato AOSP.

    • Anteriormente, estos archivos (en Android 10) se almacenaban en /data/misc/wifi en el dispositivo.

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • Lo invoca el módulo de Wi-Fi para recuperar contenido de archivos de almacenamiento específico del usuario de Wi-Fi que se convirtieron al formato AOSP.

    • Estos archivos estaban previamente almacenados (en Android 10) en el /data/misc_ce/<userId>/wifi del dispositivo.

Cómo acceder a las APIs de Wi-Fi ocultas

Símbolos (clases, métodos, campos, etc.) anotados con @hide en la conexión Wi-Fi módulos no forman parte de la plataforma de su API pública y no se puede acceder a ellos dispositivos con el módulo instalado. Dispositivos que no incluyen Wi-Fi puede seguir usando las APIs de Wi-Fi de @hide siguiendo los pasos que se indican a continuación.

  1. Quita las restricciones de visibilidad impuestas el framework-wifi a las packages/modules/Wifi/framework/Android.bp si cambias el impl_library_visibility a público.

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. Cambia la regla de compilación para permitir que la biblioteca acceda a las @hide APIs de Wi-Fi. Para Por ejemplo, la siguiente es una regla de compilación para un java_library.

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

    Para permitir el acceso de foo-lib a la biblioteca, cambia la regla de compilación de la siguiente manera:

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. Asegúrate 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.

Cómo acceder a las APIs de framework ocultas

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

  1. En tanto wifi-service-pre-jarjar como service-wifi, cambia el El atributo sdk_version es core_platform.

  2. En ambos, wifi-service-pre-jarjar y service-wifi, agrega framework. y android_system_server_stubs_current en el atributo libs.

  3. Verifica que el resultado sea similar al de la siguiente muestra 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",
        ],
    }
    

Prueba

El Conjunto de pruebas de compatibilidad (CTS) de Android verifica la disponibilidad mediante la ejecución de un conjunto integral de pruebas de CTS en cada módulo lanzamiento. También puedes ejecutar las pruebas que se describen en Prueba, depuración y ajuste Wi-Fi