O módulo Wi-Fi é atualizável, ou seja, ele pode receber atualizações de recursos fora do ciclo normal de lançamento do Android. Este módulo contém o seguinte componentes de solução.
Figura 1. Componentes e arquitetura do módulo Wi-Fi
Veja a seguir os benefícios do módulo Wi-Fi.
Os usuários finais têm uma experiência consistente do Wi-Fi em dispositivos Android e correções de problemas de interoperabilidade com atualizações de módulos.
Os desenvolvedores de apps têm menos fragmentação de plataforma.
Os OEMs podem atender aos requisitos da operadora e reduzir os custos de personalizações individuais, já que não precisam de diferentes implementações dos mesmos requisitos de maneiras diferentes.
Limite do módulo para o Android 12 e o Android 13
packages/modules/Wifi
framework
java/
android/net/wifi
(arquivos doframeworks/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 doframeworks/base/packages/OsuLogin
)ServiceResources/
(novidade no Android 12, sobreposição o manifesto do APK é armazenado aqui.res/
(novidade no Android 11, configurações de Wi-Fi) extraído deframeworks/base/core/res/res
)AndroidManifest.xml
Android.bp
WifiDialog/
(novo no app Android 13 para iniciar caixas de diálogo do usuário solicitadas pelo serviço é armazenada aqui.)src/
com/android/wifi/dialog
(contém a atividade que as caixas de diálogo estão iniciado)
AndroidManifest.xml
Android.bp
Os diretórios anteriores também contêm código que permanece fora do componente modular do sistema e localização atual, por exemplo:
wificond interface
(classes no pacoteandroid.net.wifi.nl80211
, para exemplo:WifiNl80211Manager
)- Exemplo de app de sobreposição de recursos
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_system_iface
Os OEMs podem usar os exemplos de comandos para ajudar a mover os patches dos diretórios do projeto original para o novo diretório do projeto.
Mover um patch de frameworks/base/wifi
Como gerar o arquivo de patch em root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Como aplicar o arquivo de patch a root/packages/modules/Wi-Fi
git am -p2 --directory=framework/ patch-file.txt
Mover 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 do diretório foi alterada durante a migração.
Em frameworks/opt/net/wifi
, divida o commit em dois, um para
service/
e outro para tests/
.
Como migrar o HEAD commit
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
Como gerar dois arquivos de patch de confirmação
git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt
Como aplicar os dois patches a pacotes/módulos/Wi-Fi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Comprimir as duas confirmações em uma só
git rebase -i
Altere a operação da segunda confirmação para squash
.
Edite a mensagem de confirmação conforme necessário.
Limite do módulo para o Android 11
O serviço de Wi-Fi continua sendo executado dentro do processo de serviço do sistema. O 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 continuam sendo parte da série build do AOSP.
- 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 podem fazer isso. Para reduzir o esforço envolvido na transferência de mudanças de localização de arquivos, recomendamos fazer upstream de quantas mudanças for possível para o AOSP (depois de transferi-las para o Android 11 ou refatorar extensões proprietárias para usar APIs formais do Android ou extensões HAL do fornecedor para separá-las do código do AOSP.
Formato do módulo
O módulo de Wi-Fi (com.android.wifi
) está ativado
no formato APEX e está disponível para dispositivos
com o Android 11 ou mais recente. O arquivo APEX inclui
componentes a seguir.
- Biblioteca do 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
- Bibliotecas Proto
- Outros componentes do sistema
- HALs de Wi-Fi
wificond
bouncycastle
ksoap2
libnanohttpd
Este módulo interage com o framework usando apenas a @SystemApi
estável (sem
@hide
uso da API) e é assinada com uma assinatura do Google em vez de uma plataforma
assinatura.
Personalização
O módulo Wi-Fi não oferece suporte à personalização direta, mas é possível personalizar a configuração usando sobreposições de recursos de execução (RROs, na sigla em inglês) ou configurações de operadora.
Figura 2. Personalização do módulo Wi-Fi
- Para pequenas personalizações, ative ou desative as configurações no
config
do RRO. - Para ter mais controle, personalize os valores de configuração de qualquer chave de configuração de operadora
exposta como
@SystemAPI
.
Usar sobreposições de recursos no ambiente de execução
Você pode personalizar o módulo Wi-Fi substituindo as configurações padrão
usando RROs. Para uma lista de configurações de sobreposição, consulte
packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
:
Para detalhes do comportamento da configuração, consulte
packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
:
Para um exemplo de app de sobreposição, consulte
device/google/coral/rro_overlays/WifiOverlay/
:
Como o device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
define o atributo targetPackage
como com.android.wifi.resources
e o
O APK de recursos fornecido pelo módulo Wi-Fi tem um nome de pacote.
com.google.android.wifi.resources
, é preciso definir os APKs de sobreposição
De targetPackage
para com.google.android.wifi.resources
para sobrepor o Wi-Fi
com sucesso.
Migrar o formato de armazenamento de configuração
O módulo de Wi-Fi pode analisar apenas o formato de armazenamento de configuração de Wi-Fi do AOSP. Se
você já tiver modificado o formato de armazenamento da configuração de Wi-Fi (que
incluir a lista de redes salvas do usuário), será necessário converter esses dados para o arquivo
ao atualizar um dispositivo para qualquer versão do Android que inclua a rede Wi-Fi
mais tarde neste módulo. Os hooks necessários para essa 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 de Wi-Fi para recuperar o conteúdo do arquivo de armazenamento compartilhado por Wi-Fi que foram convertidos para o formato AOSP.
Esses arquivos eram armazenados anteriormente (no Android 10) na pasta
/data/misc/wifi
do dispositivo.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Invocado pelo módulo de Wi-Fi para recuperar o conteúdo do arquivo de armazenamento específico do usuário de Wi-Fi que foram convertidos para o formato AOSP.
Esses arquivos eram armazenados anteriormente (no Android 10) na pasta
/data/misc_ce/<userId>/wifi
do dispositivo.
Acessar APIs de Wi-Fi ocultas
Símbolos (classes, métodos, campos etc.) com a anotação @hide
no Wi-Fi
módulo não fazem parte da plataforma de API pública e não pode ser acessado no
dispositivos com o módulo instalado. Dispositivos que não têm Wi-Fi
pode continuar usando as APIs de Wi-Fi do @hide
seguindo as etapas abaixo.
Remova as restrições de visibilidade aplicadas a
framework-wifi
àspackages/modules/Wifi/framework/Android.bp
alterando oimpl_library_visibility
para o público.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Mudar a regra de build para permitir o acesso à biblioteca das APIs Wi-Fi
@hide
. Para exemplo, confira abaixo uma regra de build para umjava_library
.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
Para permitir o acesso à biblioteca para
foo-lib
, mude a regra de build da seguinte maneira:java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Verifique se
framework-wifi.impl
aparece antes deframework
na lista delibs
. A ordem das dependências no atributolibs
é significativa.
Acessar APIs de framework ocultas
Símbolos anotados com @hide
fora do módulo Wi-Fi não podem ser acessados por
no módulo Wi-Fi. Dispositivos que não incluem o módulo Wi-Fi podem
continuar usando as APIs externas @hide
(por exemplo, de framework.jar
) nos
service-wifi
fazendo as seguintes modificações em
frameworks/opt/net/wifi/service/Android.bp
.
Nos dois
wifi-service-pre-jarjar
eservice-wifi
, mude asdk_version
paracore_platform
.Em ambos
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 conjunto de teste de compatibilidade do Android (CTS) verifica os recursos do módulo Wi-Fi executando um conjunto abrangente de testes do CTS em cada versão do módulo. Você também pode executar os testes descritos em Testar, depurar e ajustar o Wi-Fi.