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.
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 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, superposición) el manifiesto del APK se almacena aquí).res/
(nuevo en Android 11, parámetros de configuración de Wi-Fi) se extrajo deframeworks/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 paqueteandroid.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
yWifiRttService
OsuLogin
ServiceWifiResources
El módulo excluye los siguientes componentes, que siguen siendo parte del compilación de AOSP.
- Componente nativo de
wificond
ensystem/connectivity/wificond
- interfaz
wificond
(clases en el paqueteandroid.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.
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.
Quita las restricciones de visibilidad impuestas el
framework-wifi
a laspackages/modules/Wifi/framework/Android.bp
si cambias elimpl_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 que la biblioteca acceda a las
@hide
APIs de Wi-Fi. Para 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 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", ], }
Asegúrate de que
framework-wifi.impl
aparezca antes deframework
en la lista. delibs
. El orden de las dependencias en el atributolibs
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
En tanto
wifi-service-pre-jarjar
comoservice-wifi
, cambia el El atributosdk_version
escore_platform
.En ambos,
wifi-service-pre-jarjar
yservice-wifi
, agregaframework
. yandroid_system_server_stubs_current
en el atributolibs
.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