El módulo de Wi-Fi se puede actualizar, lo que significa que puede recibir actualizaciones de capacidades fuera del ciclo normal de lanzamientos de Android. Este módulo contiene los siguientes componentes.
Figura 1: Componentes y arquitectura del módulo de Wi-Fi
El módulo de Wi-Fi proporciona los siguientes beneficios:
Los usuarios finales obtienen una experiencia de Wi-Fi coherente en todos los dispositivos Android y correcciones para problemas de interoperabilidad a través de actualizaciones de módulos.
Los desarrolladores de apps obtienen una fragmentación de la plataforma reducida.
Los OEMs pueden cumplir con los requisitos de los operadores y, al mismo tiempo, reducir los costos de las personalizaciones individuales (ya que no necesitan diferentes implementaciones de los mismos requisitos de diferentes maneras).
Límite del módulo para Android 12 y Android 13
packages/modules/Wififrameworkjava/android/net/wifi(archivos deframeworks/base/wifi/java)
tests/android/net/wifi(archivos deframeworks/base/wifi/tests)
aidl-export/api/Android.bp
service/java/com/android/server/wifi(archivos deframeworks/opt/net/wifi/service/java)
tests/com/android/server/wifi(archivos deframeworks/opt/net/wifi/tests)
proto/Android.bpproguard.flagswifi.rc
OsuLogin/(archivos deframeworks/base/packages/OsuLogin)ServiceResources/(novedad en Android 12, el manifiesto de APK de superposición se almacena aquí)res/(novedad en Android 11, las configuraciones de Wi-Fi se extrajeron deframeworks/base/core/res/res)AndroidManifest.xmlAndroid.bp
WifiDialog/(novedad en Android 13, la app para iniciar los diálogos de usuario solicitados por el servicio se almacena aquí)src/com/android/wifi/dialog(contiene la actividad desde la que se inician los diálogos)
AndroidManifest.xmlAndroid.bp
Los directorios anteriores también contienen código que permanece fuera del componente modular del sistema y en su ubicación actual, por ejemplo:
wificond interface(clases en el paqueteandroid.net.wifi.nl80211, por ejemplo,WifiNl80211Manager)- App de superposición de recursos de muestra
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Los OEMs pueden usar los comandos de muestra para ayudar a mover sus parches de los directorios del proyecto original al nuevo directorio del proyecto.
Mueve un parche de frameworks/base/wifi
Genera el archivo de parche en root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txtAplica el archivo de parche a root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txtMueve un parche de frameworks/opt/net/wifi
Para mover el parche de frameworks/opt/net/wifi, se necesitan pasos complejos porque se cambió la jerarquía de directorios durante la migración.
En frameworks/opt/net/wifi, divide la confirmación en dos confirmaciones, una para service/ y otra para tests/.
Migra la confirmación HEAD
git reset HEAD^git add service/git commit # Enter your commit message. Call this commit service-commitgit 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.txtgit format-patch -1 test-commit --stdout > test-patch.txt
Aplica los dos parches a packages/modules/Wifi
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
Combina las dos confirmaciones en una
git rebase -iCambia 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
El servicio de Wi-Fi continúa ejecutándose dentro del proceso del servicio del sistema. El módulo de Wi-Fi incluye todo el código en packages/modules/Wifi, incluido lo siguiente.
- Clases de SDK y servicio para
WifiService,WifiP2pService,WifiAwareService,WifiScannerServiceyWifiRttService OsuLoginServiceWifiResources
El módulo excluye los siguientes componentes, que siguen formando parte de la compilación de AOSP del OEM.
- Componente nativo
wificondensystem/connectivity/wificond - Interfaz
wificond(clases en el paqueteandroid.net.wifi.nl80211, por ejemplo,WifiNl80211Manager) android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_system_iface
Android 11 no mueve archivos, pero es posible que las versiones futuras lo hagan. Para reducir el esfuerzo que implica la portabilidad de cambios de ubicación de archivos, te recomendamos que envíes tantos cambios como sea posible a AOSP (después de portarlos a Android 11 o refactorizar las extensiones propietarias para usar las APIs formales de Android o las extensiones HAL del proveedor para separarlas del código de AOSP.
Formato del módulo
El módulo de Wi-Fi (com.android.wifi) está en
formato APEX y está disponible para dispositivos
que ejecutan Android 11 o versiones posteriores. 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 recursos (
ServiceWifiResourcesGoogle.apk) - Certificados de WFA
Dependencias del módulo
El módulo de Wi-Fi depende de los siguientes componentes.
- Conectividad
- Telefonía
- Bibliotecas de Proto
- Componentes del sistema varios
- HALs de Wi-Fi
wificondbouncycastleksoap2libnanohttpd
Este módulo interactúa con el framework usando solo @SystemApi estable (sin uso de la API de @hide) y se firma con una firma de Google en lugar de una firma de plataforma.
Personalización
El módulo de Wi-Fi no admite la personalización directa, pero puedes personalizar la configuración con superposiciones de recursos en tiempo de ejecución (RROs) o configuraciones del operador.
Figura 2: Personalización del módulo de Wi-Fi
- Para personalizaciones pequeñas, habilita o inhabilita la configuración en el RRO
config. - Para obtener más control, personaliza los valores de configuración de cualquier clave de configuración del operador expuesta como
@SystemAPI.
Usa superposiciones de recursos en tiempo de ejecución
Puedes personalizar el módulo de Wi-Fi anulando las configuraciones predeterminadas con RROs. Para obtener una lista de configuraciones superponibles, consulta packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml.
Para obtener detalles sobre el comportamiento de la configuración, consulta packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml.
Para obtener una app de superposición de muestra, consulta 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 recursos que entrega el módulo de Wi-Fi tiene el nombre de paquete com.google.android.wifi.resources, debes establecer el targetPackage de APKS de superposición en com.google.android.wifi.resources para superponer las configuraciones de Wi-Fi correctamente.
Migra el formato de almacenamiento de configuración
El módulo de Wi-Fi solo puede analizar el formato de almacenamiento de configuración de Wi-Fi de AOSP. Si modificaste anteriormente el formato de almacenamiento de configuración de Wi-Fi (que incluye la lista de redes guardadas del usuario), debes convertir esos datos al formato AOSP cuando actualices un dispositivo a cualquier versión de Android que incluya el módulo de Wi-Fi. Los hooks necesarios para esta conversión se encuentran en la clase android.net.wifi.WifiMigration.
Implementa la conversión de formato en los siguientes métodos.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)El módulo de Wi-Fi lo invoca para recuperar el contenido del archivo de almacenamiento compartido de Wi-Fi que se convirtió al formato AOSP.
Estos archivos se almacenaban anteriormente (en Android 10) en la carpeta
/data/misc/wifidel dispositivo.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)El módulo de Wi-Fi lo invoca para recuperar el contenido del archivo de almacenamiento específico del usuario de Wi-Fi que se convirtió al formato AOSP.
Estos archivos se almacenaban anteriormente (en Android 10) en la
/data/misc_ce/<userId>/wificarpeta del dispositivo.
Accede a las APIs de Wi-Fi ocultas
Los símbolos (clases, métodos, campos, etc.) anotados con @hide en el módulo de Wi-Fi no forman parte de su superficie de 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 de Wi-Fi pueden seguir usando las APIs de Wi-Fi @hide con los siguientes pasos.
Quita las restricciones de visibilidad que se colocaron en
framework-wifienpackages/modules/Wifi/framework/Android.bpcambiando el atributoimpl_library_visibilitya público.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }Cambia la regla de compilación para permitir el acceso a las APIs de Wi-Fi
@hidede la biblioteca. Por ejemplo, la siguiente es una regla de compilación para unajava_library.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }Para permitir el acceso a la biblioteca para
foo-lib, 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", ], }Asegúrate de que
framework-wifi.implaparezca antes deframeworken la lista delibs. El orden de las dependencias en el atributolibses importante.
Accede a las APIs de framework ocultas
El código dentro del módulo de Wi-Fi no puede acceder a los símbolos anotados con @hide fuera del módulo de Wi-Fi. Los dispositivos que no incluyen el módulo de Wi-Fi pueden seguir usando las APIs externas @hide (por ejemplo, de framework.jar) en service-wifi si realizan las siguientes modificaciones en frameworks/opt/net/wifi/service/Android.bp.
En ambos
wifi-service-pre-jarjaryservice-wifi, cambia el atributosdk_versionacore_platform.En ambos
wifi-service-pre-jarjaryservice-wifi, agregaframeworkyandroid_system_server_stubs_currental atributolibs.Verifica que el resultado sea similar a 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 las capacidades del módulo de Wi-Fi ejecutando un conjunto completo de pruebas de CTS en cada lanzamiento del módulo. También puedes ejecutar las pruebas que se describen en Prueba, depuración y ajuste de Wi-Fi.