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 os componentes a seguir.
Figura 1. Componentes e arquitetura do módulo Wi-Fi
O módulo Wi-Fi oferece os seguintes benefícios.
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 uma fragmentação de plataforma reduzida.
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 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 doframeworks/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 Android 13, o app para iniciar diálogos do usuário solicitados pelo serviço é armazenado aqui.)src/
com/android/wifi/dialog
: contém a atividade de onde as caixas de diálogo são iniciadas.
AndroidManifest.xml
Android.bp
Os diretórios anteriores também contêm código que permanece fora do componente do sistema modular e no local atual, por exemplo:
wificond interface
(classes no pacoteandroid.net.wifi.nl80211
, por exemplo,WifiNl80211Manager
)- Exemplo de app de sobreposição de recursos
WifiTrackerLib
libwifi_hal
libwifi_system
libwifi_system_iface
Os OEMs podem usar os comandos de exemplo para mover os patches dos diretórios de projeto originais para o novo diretório de 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 de diretórios 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
Aplicação dos dois patches a pacotes/módulos/Wi-Fi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Como mesclar dois commits em um
git rebase -i
Mude a operação do segundo commit para squash
.
Edite a mensagem de confirmação conforme apropriado.
Limite do módulo para o Android 11
O serviço de Wi-Fi continua sendo executado dentro do processo do 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 continuam fazendo parte do build 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 as versões futuras podem. Para reduzir o esforço envolvido na portabilidade de mudanças de local de arquivos, recomendamos fazer o máximo possível de mudanças no AOSP depois da portabilidade para o Android 11 ou da refatoração de extensões próprias para usar APIs formais do Android ou extensões HAL do fornecedor para desembaraçar o 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 o Android 11 ou versões mais recentes. O arquivo APEX inclui
os seguintes componentes.
- Biblioteca do SDK (
framework-wifi.jar
) - Biblioteca de serviços (
service-wifi.jar
) - APK OsuLogin (
OsuLoginGoogle.apk
) - APK de recurso (
ServiceWifiResourcesGoogle.apk
) - Certificados da 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
Esse módulo interage com o framework usando apenas @SystemApi
estável (sem
uso da API @hide
) e é assinado com uma assinatura do Google em vez de uma assinatura
da plataforma.
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 momento da execução
É possível personalizar o módulo Wi-Fi substituindo as configurações padrão
usando RROs. Para conferir uma lista de configurações sobrepostas, consulte
packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
.
Para detalhes sobre o comportamento de configuração, consulte
packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
.
Para conferir um exemplo de app de sobreposição, consulte
device/google/coral/rro_overlays/WifiOverlay/
.
Como o arquivo device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
define o atributo targetPackage
como com.android.wifi.resources
e o
APK de recurso entregue pelo módulo Wi-Fi tem o nome de pacote
com.google.android.wifi.resources
, é necessário definir o APK de sobreposição
targetPackage
como com.google.android.wifi.resources
para sobrepor as configurações
do Wi-Fi.
Migrar o formato de armazenamento da configuração
O módulo Wi-Fi só pode analisar o formato de armazenamento de configuração Wi-Fi do AOSP. Se
você já tiver modificado o formato de armazenamento de configuração de Wi-Fi (que
inclui a lista de redes salvas do usuário), será necessário converter esses dados para o formato
AOSP ao fazer upgrade de um dispositivo para qualquer versão do Android que inclua o módulo
Wi-Fi. 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 Wi-Fi para recuperar o conteúdo do arquivo de armazenamento compartilhado do Wi-Fi que foi convertido 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 extrair o conteúdo do arquivo da loja específico do usuário de Wi-Fi que foi convertido para o formato AOSP.
Esses arquivos eram armazenados anteriormente (no Android 10) na pasta
/data/misc_ce/<userId>/wifi
do dispositivo.
Acessar APIs Wi-Fi ocultas
Símbolos (classes, métodos, campos etc.) anotados com @hide
no módulo
de Wi-Fi não fazem parte da superfície da 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 usando as APIs Wi-Fi @hide
seguindo as etapas abaixo.
Remova as restrições de visibilidade aplicadas a
framework-wifi
empackages/modules/Wifi/framework/Android.bp
mudando o atributoimpl_library_visibility
para "público".java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Mude a regra de build para permitir que a biblioteca acesse as APIs Wi-Fi
@hide
. Por exemplo, confira a seguir 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 forma: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
Os símbolos anotados com @hide
fora do módulo Wi-Fi não podem ser acessados por
código no módulo Wi-Fi. Os dispositivos que não incluem o módulo Wi-Fi podem
continuar usando APIs externas @hide
(por exemplo, do framework.jar
) em
service-wifi
fazendo as seguintes modificações em
frameworks/opt/net/wifi/service/Android.bp
.
Em ambos
wifi-service-pre-jarjar
eservice-wifi
, mude o atributosdk_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.