O módulo Wi-Fi é atualizável, o que significa que pode receber atualizações de funcionalidade fora do ciclo normal de lançamento do Android. Este módulo contém os seguintes componentes.
Figura 1. Componentes e arquitetura do módulo Wi-Fi
O módulo Wi-Fi oferece os seguintes benefícios.
Os usuários finais obtêm uma experiência Wi-Fi consistente em dispositivos Android e corrigem problemas de interoperabilidade por meio de atualizações de módulos.
Os desenvolvedores de aplicativos obtêm fragmentação reduzida da plataforma.
Os OEMs podem atender aos requisitos das transportadoras e, ao mesmo tempo, reduzir os custos de personalizações individuais (pois não precisam de implementações diferentes dos mesmos requisitos de maneiras diferentes).
Limite do módulo para Android 12 e Android 13
-
packages/modules/Wifi
-
framework
-
java/
-
android/net/wifi
(arquivos deframeworks/base/wifi/java
)
-
-
tests/
-
android/net/wifi
(arquivos deframeworks/base/wifi/tests
)
-
-
aidl-export/
-
api/
-
Android.bp
-
-
service/
-
java/
-
com/android/server/wifi
(arquivos deframeworks/opt/net/wifi/service/java
)
-
-
tests/
-
com/android/server/wifi
(arquivos deframeworks/opt/net/wifi/tests
)
-
-
proto/
-
Android.bp
-
proguard.flags
-
wifi.rc
-
-
OsuLogin/
(arquivos deframeworks/base/packages/OsuLogin
) -
ServiceResources/
(novo no Android 12, o manifesto do APK de sobreposição é armazenado aqui)-
res/
(novo no Android 11, configurações de Wi-Fi extraídas deframeworks/base/core/res/res
) -
AndroidManifest.xml
-
Android.bp
-
-
WifiDialog/
(novo no aplicativo Android 13 para iniciar diálogos de usuário solicitados pelo serviço é armazenado aqui.)-
src/
-
com/android/wifi/dialog
(contém a atividade a partir da qual as caixas de diálogo são iniciadas)
-
-
AndroidManifest.xml
-
Android.bp
-
-
Os diretórios acima também contêm código que permanece fora do componente modular do sistema e em sua localização atual, por exemplo:
-
wificond interface
(classes no pacoteandroid.net.wifi.nl80211
, por exemplo,WifiNl80211Manager
) - Exemplo de aplicativo de sobreposição de recursos
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
Os OEMs podem usar os comandos de amostra para ajudar a mover seus patches dos diretórios originais do projeto para o novo diretório do projeto.
Movendo um patch de frameworks/base/wifi
Gerando o arquivo de patch em root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Aplicando o arquivo de patch em root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Movendo um patch de frameworks/opt/net/wifi
Para mover o patch de frameworks/opt/net/wifi
, são necessárias etapas complexas porque a hierarquia de diretórios foi alterada durante a migração.
Em frameworks/opt/net/wifi
, divida o commit em dois commits, um para service/
e outro para tests/
.
Migrando o commit 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
Gerando dois arquivos de patch de commit
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Aplicando os dois patches a pacotes/módulos/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Esmagando os dois commits de volta em um commit
git rebase -i
Altere a operação do segundo commit para squash
.
Edite a mensagem de commit conforme apropriado.
Limite do módulo para Android 11
O serviço Wi-Fi continua em execução dentro do processo de serviço do sistema. O módulo Wi-Fi inclui todo o código em packages/modules/Wifi
incluindo o seguinte.
- SDK e classes de serviço para
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
eWifiRttService
-
OsuLogin
-
ServiceWifiResources
O módulo exclui os seguintes componentes, que permanecem parte da construção AOSP do OEM.
- componente nativo
wificond
emsystem/connectivity/wificond
- interface
wificond
(classes no pacoteandroid.net.wifi.nl80211
, por exemplo,WifiNl80211Manager
) -
android.net.wifi.SoftApConfToXmlMigrationUtil
-
android.net.wifi.WifiNetworkScoreCache
-
android.net.wifi.WifiMigration
-
WifiTrackerLib
-
libwifi_hal
-
libwifi_system
-
libwifi_system_iface
O Android 11 não move arquivos, mas versões futuras sim. Para reduzir o esforço envolvido na portabilidade de alterações de localização de arquivos, recomendamos upstream tantas alterações quanto possível para AOSP (após portá-las para Android 11 ou refatorar extensões proprietárias para usar APIs formais do Android ou extensões HAL de fornecedores para separá-las do código AOSP).
Formato do módulo
O módulo Wi-Fi ( com.android.wifi
) está no formato APEX e está disponível para dispositivos com Android 11 ou superior. O arquivo APEX inclui os seguintes componentes.
- Biblioteca SDK (
framework-wifi.jar
) - Biblioteca de serviços (
service-wifi.jar
) - APK OsuLogin (
OsuLoginGoogle.apk
) - APK de recurso (
ServiceWifiResourcesGoogle.apk
) - Certificados WFA
Dependências do módulo
O módulo Wi-Fi depende dos seguintes componentes.
- Conectividade
- Telefonia
- Protobibliotecas
- Componentes diversos do sistema
- HALs WiFi
-
wificond
-
bouncycastle
-
ksoap2
-
libnanohttpd
Este módulo interage com a estrutura usando apenas @SystemApi
estável (sem uso de API @hide
) e é assinado com uma assinatura do Google em vez de uma assinatura de plataforma.
Personalização
O módulo Wi-Fi não oferece suporte à personalização direta, mas você pode personalizar a configuração usando RROs (sobreposições de recursos de tempo de execução) ou configurações de operadora.
Figura 2. Personalização do módulo Wi-Fi
- Para pequenas personalizações, ative ou desative as configurações na
config
do RRO. - Para obter mais controle, personalize os valores de configuração para qualquer chave de configuração da operadora exposta como
@SystemAPI
.
Usando sobreposições de recursos de tempo de execução
Você pode personalizar o módulo Wi-Fi substituindo as configurações padrão usando RROs. Para obter uma lista de configurações sobrepostas, consulte packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
. Para obter detalhes do comportamento de configuração, consulte packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
. Para obter um exemplo de aplicativo de sobreposição, consulte device/google/coral/rro_overlays/WifiOverlay/
.
Porque o arquivo device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
define o atributo targetPackage
como com.android.wifi.resources
e o APK de recurso fornecido pelo módulo Wi-Fi tem o nome de pacote com.google.android.wifi.resources
, você deve definir o APKS targetPackage
de sobreposição como com.google.android.wifi.resources
para sobrepor as configurações de Wi-Fi com êxito.
Migrando formato de armazenamento de configuração
O módulo Wi-Fi pode analisar apenas o formato de armazenamento de configuração Wi-Fi AOSP. Se você modificou anteriormente o formato de armazenamento da configuração Wi-Fi (que inclui a lista de redes salvas do usuário), deverá converter esses dados para o formato AOSP ao atualizar um dispositivo para qualquer versão do Android que inclua o módulo Wi-Fi. Os ganchos necessários para esta conversão estão na classe android.net.wifi.WifiMigration
.
Implemente a conversão de formato nos métodos a seguir.
WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)
Invocado pelo módulo Wi-Fi para recuperar o conteúdo do arquivo de armazenamento compartilhado Wi-Fi que foi convertido para o formato AOSP.
Esses arquivos foram armazenados anteriormente (no Android 10) na pasta
/data/misc/wifi
do dispositivo.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Invocado pelo módulo Wi-Fi para recuperar o conteúdo do arquivo de armazenamento específico do usuário Wi-Fi que foi convertido para o formato AOSP.
Esses arquivos foram armazenados anteriormente (no Android 10) na pasta
/data/misc_ce/<userId>/wifi
do dispositivo.
Acessando APIs Wi-Fi ocultas
Símbolos (classes, métodos, campos, etc.) anotados com @hide
no módulo Wi-Fi não fazem parte de sua superfície API pública e não podem ser acessados em dispositivos com o módulo instalado. Os dispositivos que não incluem o módulo Wi-Fi podem continuar a usar APIs @hide
Wi-Fi seguindo as etapas a seguir.
Remova as restrições de visibilidade colocadas no
framework-wifi
empackages/modules/Wifi/framework/Android.bp
alterando o atributoimpl_library_visibility
para público.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Altere a regra de construção para permitir acesso à biblioteca
@hide
APIs Wi-Fi. Por exemplo, a seguir está uma regra de construção parajava_library
.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
Para permitir o acesso à biblioteca para
foo-lib
, altere a regra de construção conforme mostrado abaixo.java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Certifique-se de que
framework-wifi.impl
apareça antesframework
na lista delibs
. A ordem das dependências no atributolibs
é significativa.
Acessando APIs de estrutura ocultas
Símbolos anotados com @hide
fora do módulo Wi-Fi não podem ser acessados por código dentro do módulo Wi-Fi. Os dispositivos que não incluem o módulo Wi-Fi podem continuar a usar APIs externas @hide
(por exemplo, de framework.jar
) em service-wifi
fazendo as seguintes modificações em frameworks/opt/net/wifi/service/Android.bp
.
Em
wifi-service-pre-jarjar
eservice-wifi
, altere o atributosdk_version
paracore_platform
.Em
wifi-service-pre-jarjar
eservice-wifi
, adicioneframework
eandroid_system_server_stubs_current
ao atributolibs
.Verifique se o resultado é semelhante ao exemplo de código a seguir.
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", ], }
Teste
O Android Compatibility Test Suite (CTS) verifica a funcionalidade do módulo Wi-Fi executando um conjunto abrangente de testes CTS em cada versão do módulo. Você também pode executar os testes descritos em Teste, depuração e ajuste de Wi-Fi .