El módulo Wi-Fi es actualizable, lo que significa que puede recibir actualizaciones de funcionalidad fuera del ciclo de lanzamiento normal de Android. Este módulo contiene los siguientes componentes.
Figura 1. Arquitectura y componentes del módulo Wi-Fi
El módulo Wi-Fi proporciona los siguientes beneficios.
Los usuarios finales obtienen una experiencia Wi-Fi consistente 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 de los operadores 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 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, el manifiesto APK superpuesto se almacena aquí)-
res/
(nuevo en Android 11, configuraciones de Wi-Fi extraídas deframeworks/base/core/res/res
) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(lo nuevo en la aplicación de Android 13 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 cuadros de diálogo)
-
-
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
) - Aplicación de superposición de recursos de muestra
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
Los OEM pueden utilizar los comandos de muestra para ayudar a mover sus parches de los directorios del proyecto original al nuevo directorio del proyecto.
Mover un parche desde frameworks/base/wifi
Generando el archivo de parche en root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Aplicar el archivo de parche a root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Mover un parche desde frameworks/opt/net/wifi
Para mover el parche desde frameworks/opt/net/wifi
, se necesitan pasos complejos porque la jerarquía de directorios se cambió durante la migración.
En frameworks/opt/net/wifi
, divida la confirmación en dos confirmaciones, una para service/
y otra para tests/
.
Migrando el compromiso 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
Generando 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
Aplicando los dos parches a paquetes/módulos/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Aplastando los dos compromisos nuevamente en un solo compromiso
git rebase -i
Cambie la operación de la segunda confirmación a squash
.
Edite el mensaje de confirmación según corresponda.
Límite del módulo para Android 11
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
yWifiRttService
-
OsuLogin
-
ServiceWifiResources
El módulo excluye los siguientes componentes, que siguen siendo parte de la compilación 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 las versiones futuras sí podrían hacerlo. Para reducir el esfuerzo que implica transferir los cambios de ubicación de archivos, recomendamos actualizar tantos cambios como sea posible a AOSP (después de transferirlos a Android 11 o refactorizar extensiones propietarias para usar API formales de Android o extensiones HAL de proveedores para desenredarlos del código 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 superior. El archivo APEX incluye los siguientes componentes.
- Biblioteca SDK (
framework-wifi.jar
) - Biblioteca de servicios (
service-wifi.jar
) - OsuLogin APK (
OsuLoginGoogle.apk
) - APK de recursos (
ServiceWifiResourcesGoogle.apk
) - certificados WFA
Dependencias del módulo
El módulo Wi-Fi depende de los siguientes componentes.
- Conectividad
- Telefonía
- Protobibliotecas
- Componentes varios del sistema
- HAL WiFi
-
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 mediante superposiciones de recursos de tiempo de ejecución (RRO) o configuraciones del operador.
Figura 2. Personalización del módulo Wi-Fi
- Para pequeñas personalizaciones, habilite o deshabilite la configuración en la
config
de RRO. - Para obtener más control, personalice los valores de configuración para cualquier clave de configuración del 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/
.
Porque el archivo device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
establece el atributo targetPackage
en com.android.wifi.resources
y el APK de recursos entregado por el módulo Wi-Fi tiene el nombre de paquete com.google.android.wifi.resources
, debes configurar el targetPackage
de APKS superpuesto en com.google.android.wifi.resources
para superponer las configuraciones de Wi-Fi correctamente.
Migrar el formato de almacenamiento de configuración
El módulo Wi-Fi solo puede analizar el formato de almacenamiento de configuración Wi-Fi AOSP. Si modificó previamente el formato de almacenamiento de la configuración de Wi-Fi (que incluye la lista de redes guardadas del usuario), debe convertir esos datos al formato AOSP al actualizar un dispositivo a cualquier versión de Android que incluya el módulo Wi-Fi. Los enlaces necesarios para esta conversión se encuentran en la clase android.net.wifi.WifiMigration
.
Implemente la conversión de formato con 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 almacenaban anteriormente (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 Wi-Fi que se ha convertido al formato AOSP.
Estos archivos se almacenaban anteriormente (en Android 10) en la carpeta
/data/misc_ce/<userId>/wifi
del 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 desde dispositivos con el módulo instalado. Los dispositivos que no incluyen el módulo Wi-Fi pueden continuar usando las API @hide
Wi-Fi siguiendo los siguientes pasos.
Elimine las restricciones de visibilidad impuestas 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. ], ... }
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 parajava_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", ], }
Asegúrese de que
framework-wifi.impl
aparezca antesframework
en la lista delibs
. El orden de las dependencias en el atributolibs
es significativo.
Acceder a las API del marco oculto
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 continuar usando las API externas @hide
(por ejemplo, desde framework.jar
) en service-wifi
realizando las siguientes modificaciones en frameworks/opt/net/wifi/service/Android.bp
.
Tanto en
wifi-service-pre-jarjar
comoservice-wifi
, cambie el atributosdk_version
acore_platform
.Tanto en
wifi-service-pre-jarjar
comoservice-wifi
, agregueframework
yandroid_system_server_stubs_current
al atributolibs
.Verifique que el resultado sea similar al siguiente código de ejemplo.
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
El conjunto de pruebas de compatibilidad de Android (CTS) verifica la funcionalidad del módulo Wi-Fi ejecutando un conjunto completo de pruebas CTS en cada versión del módulo. También puede ejecutar las pruebas descritas en Pruebas, depuración y ajuste de Wi-Fi .