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 Wi-Fi
El módulo Wi-Fi ofrece los siguientes beneficios:
Los usuarios finales obtienen una experiencia de Wi-Fi coherente en todos los dispositivos Android y se solucionan los problemas de interoperabilidad a través de las actualizaciones de módulos.
Los desarrolladores de apps obtienen una menor fragmentación de la plataforma.
Los OEM 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/Wifi
framework
java/
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.bp
proguard.flags
wifi.rc
OsuLogin/
(archivos deframeworks/base/packages/OsuLogin
)ServiceResources/
(nuevo en Android 12, aquí se almacena el manifiesto del APK de superposición)res/
(nuevo en Android 11, configuraciones de Wi-Fi extraídas deframeworks/base/core/res/res
)AndroidManifest.xml
Android.bp
WifiDialog/
(nuevo en Android 13: aquí se almacena la app para iniciar diálogos del usuario solicitados por el servicio).src/
com/android/wifi/dialog
(contiene la actividad desde la que se inician los diálogos)
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 paqueteandroid.net.wifi.nl80211
, por ejemplo,WifiNl80211Manager
)- App de ejemplo de superposición de recursos
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_system_iface
Los OEM pueden usar los comandos de muestra para ayudar a trasladar sus parches de los directorios del proyecto original al directorio del proyecto nuevo.
Cómo mover un parche de frameworks/base/wifi
Cómo generar el archivo de parche en root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Cómo aplicar el archivo de parche a root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Mueve un parche de frameworks/opt/net/wifi
Para mover el parche de frameworks/opt/net/wifi
, se necesitan pasos complejos, ya que la jerarquía de directorios se cambió durante la migración.
En frameworks/opt/net/wifi
, divide la confirmación en dos confirmaciones, una para service/
y otra para tests/
.
Cómo migrar 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
Cómo generar 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
Cómo aplicar los dos parches a packages/modules/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Cómo reducir los dos commits a uno
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
El servicio de Wi-Fi sigue 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
,WifiScannerService
yWifiRttService
OsuLogin
ServiceWifiResources
El módulo excluye los siguientes componentes, que siguen siendo parte de la compilación del AOSP del OEM.
- Componente nativo
wificond
ensystem/connectivity/wificond
- Interfaz
wificond
(clases en el paqueteandroid.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 es posible que las versiones futuras sí lo hagan. Para reducir el esfuerzo que implica portar los cambios de ubicación de archivos, recomendamos enviar la mayor cantidad posible de cambios al AOSP (después de portarlos a Android 11 o refactorizar las extensiones propietarias para usar APIs formales de Android o extensiones de HAL del proveedor para separarlas del código del 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 de módulos
El módulo de Wi-Fi depende de los siguientes componentes.
- Conectividad
- Telefonía
- Bibliotecas de .proto
- Componentes varios del sistema
- HALs de Wi-Fi
wificond
bouncycastle
ksoap2
libnanohttpd
Este módulo interactúa con el framework solo con @SystemApi
estables (no se usa 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 de tiempo de ejecución (RRO) o configuraciones de operador.
Figura 2: Personalización del módulo Wi-Fi
- Para personalizaciones pequeñas, habilita o inhabilita parámetros de configuración en el RRO
config
. - Para tener más control, personaliza los valores de configuración de cualquier clave de configuración de la empresa de transporte expuesta como
@SystemAPI
.
Usa superposiciones de recursos en 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 obtener detalles sobre el comportamiento de la configuración, consulta packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
.
Para ver una app de superposición de ejemplo, consulta device/google/coral/rro_overlays/WifiOverlay/
.
Dado 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 los APKs de superposición en com.google.android.wifi.resources
para superponer correctamente la configuración de Wi-Fi.
Migra 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 del AOSP. Si anteriormente 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 formato de 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 invoca este método para recuperar el contenido del archivo de almacenamiento compartido de Wi-Fi que se convirtió al formato de AOSP.
Anteriormente (en Android 10), estos archivos se almacenaban en la carpeta
/data/misc/wifi
del dispositivo.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
El módulo de Wi-Fi lo invoca para recuperar el contenido del archivo de la tienda específico del usuario de Wi-Fi que se convirtió al formato de AOSP.
Anteriormente (en Android 10), estos archivos se almacenaban en la carpeta
/data/misc_ce/<userId>/wifi
del dispositivo.
Accede a las APIs de Wi-Fi ocultas
Los símbolos (clases, métodos, campos, etcétera) 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 @hide
Wi-Fi con los siguientes pasos.
Quita las restricciones de visibilidad que se aplican a
framework-wifi
enpackages/modules/Wifi/framework/Android.bp
cambiando el atributoimpl_library_visibility
a 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 de la biblioteca
@hide
. Por ejemplo, la siguiente es una regla de compilación para unjava_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.impl
aparezca antes deframework
en la lista delibs
. El orden de las dependencias en el atributolibs
es importante.
Cómo acceder a las APIs ocultas del framework
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 de @hide
(por ejemplo, de framework.jar
) en service-wifi
si realizan las siguientes modificaciones en frameworks/opt/net/wifi/service/Android.bp
.
En
wifi-service-pre-jarjar
yservice-wifi
, cambia el atributosdk_version
acore_platform
.En ambos
wifi-service-pre-jarjar
yservice-wifi
, agregaframework
yandroid_system_server_stubs_current
al atributolibs
.Verifica 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", ], }
Prueba
El Conjunto de pruebas de compatibilidad (CTS) de Android verifica las capacidades del módulo Wi-Fi ejecutando un conjunto integral de pruebas de CTS en cada versión del módulo. También puedes ejecutar las pruebas que se describen en Prueba, depura y ajusta la conexión Wi-Fi.