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. Componentes y arquitectura del módulo Wi-Fi
El módulo Wi-Fi proporciona los siguientes beneficios.
Los usuarios finales obtienen una experiencia 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 fragmentación de la plataforma reducida.
Los OEM pueden cumplir con los requisitos de los transportistas 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
-
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 de APK superpuesto se almacena aquí)-
res/
(nuevo en Android 11, configuraciones Wi-Fi extraídas deframeworks/base/core/res/res
) -
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 usar los comandos de muestra para ayudar a mover sus parches desde 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 raíz/paquetes/módulos/Wifi
git am -p2 --directory=framework/ patch-file.txt
Mover un parche desde frameworks/opt/net/wifi
Para mover el parche de 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/
.
Migración de 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
Generación de 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
Aplastar las dos confirmaciones de nuevo en una confirmación
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 podrían hacerlo. Para reducir el esfuerzo involucrado en la migración de cambios de ubicación de archivos, recomendamos realizar la mayor cantidad posible de cambios en AOSP (después de transferirlos a Android 11 o refactorizar las extensiones propietarias para usar API de Android formales o extensiones HAL del proveedor para desenredarlos 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 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
- Bibliotecas de prototipos
- Componentes misceláneos 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 de operador.
Figura 2. Personalización del módulo Wi-Fi
- Para pequeñas personalizaciones, active o desactive 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
.
Uso de superposiciones de recursos de 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
, debe establecer el paquete de destino de targetPackage
de superposición en com.google.android.wifi.resources
para superponer las configuraciones de Wi-Fi correctamente.
Migración del 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 modificó previamente el formato de almacenamiento de la configuración Wi-Fi (que incluye la lista de redes 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 de Wi-Fi para recuperar el contenido del archivo de la tienda compartida de 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 de Wi-Fi para recuperar el contenido del archivo de almacenamiento específico del usuario de Wi-Fi que se ha convertido al formato AOSP.
Estos archivos se almacenaban anteriormente (en Android 10) en la
/data/misc_ce/<userId>/wifi
del dispositivo.
Acceder a las API 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 continuar usando las API @hide
Wi-Fi siguiendo los siguientes pasos.
Elimine las restricciones de visibilidad colocadas en
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 antes deframework
en la lista delibs
. El orden de las dependencias en el atributolibs
es significativo.
Acceder a API de marco 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 las API externas @hide
(por ejemplo, de framework.jar
) en service-wifi
al realizar 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 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
El conjunto de pruebas de compatibilidad de Android (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 .