O módulo Wi-Fi pode ser atualizado, ou seja, ele pode receber atualizações de recursos fora do ciclo normal de versões 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 têm uma experiência consistente de Wi-Fi em dispositivos Android e correções para problemas de interoperabilidade com atualizações de módulo.
Os desenvolvedores de apps têm menos fragmentação da plataforma.
Os OEMs podem atender aos requisitos das operadoras e reduzir os custos de personalizações individuais, já que 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 Android 13. Os diálogos do usuário iniciados pelo app e solicitados pelo serviço são armazenados aqui.)src/
com/android/wifi/dialog
(contém a atividade em que 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 ajudar a 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
Aplicar o arquivo de patch a root/packages/modules/Wifi
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/
.
Migrar 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
Gerar 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
Aplicar os dois patches a packages/modules/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Unindo os dois commits em um só
git rebase -i
Mude a operação do segundo commit para squash
.
Edite a mensagem de commit conforme necessário.
Limite do módulo para o Android 11
O serviço de Wi-Fi continua sendo executado no processo de serviço do sistema. O módulo Wi-Fi
inclui todo o código em packages/modules/Wifi
, incluindo o seguinte.
- Classes de SDK e serviço para
WifiService
,WifiP2pService
,WifiAwareService
,WifiScannerService
eWifiRttService
OsuLogin
ServiceWifiResources
O módulo exclui os seguintes componentes, que continuam fazendo parte do build do 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 podem fazer isso. Para reduzir o esforço envolvido na migração de mudanças de localização de arquivos, recomendamos o envio de upstream de quantas mudanças forem possíveis para o AOSP (depois de migrá-las para o Android 11 ou refatorar extensões proprietárias para usar APIs Android formais ou extensões HAL do fornecedor 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 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 do 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
- Componentes diversos do sistema
- HALs de Wi-Fi
wificond
bouncycastle
ksoap2
libnanohttpd
Esse módulo interage com o framework usando apenas @SystemApi
estáveis (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 aceita personalização direta, mas é possível personalizar a configuração usando substituições de recursos de tempo de execução (RROs, na sigla em inglês) ou configurações da operadora.
Figura 2. Personalização do módulo Wi-Fi
- Para pequenas personalizações, ative ou desative as configurações no RRO
config
. - 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 uma lista de configurações sobreponíveis, consulte
packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
.
Para detalhes sobre o 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 arquivo device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xml
define o atributo targetPackage
como com.android.wifi.resources
e o
APK de recursos entregue pelo módulo Wi-Fi tem o nome do pacote
com.google.android.wifi.resources
, defina o targetPackage
dos APKS de sobreposição
como com.google.android.wifi.resources
para sobrepor as configurações de Wi-Fi
com êxito.
Migrar o formato de armazenamento da configuração
O módulo Wi-Fi só pode analisar o formato de armazenamento de configuração do Wi-Fi do AOSP. Se você já tiver modificado o formato de armazenamento da 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 seguintes métodos.
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.
Antes (no Android 10), esses arquivos eram armazenados 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 do Wi-Fi que foi convertido para o formato AOSP.
Antes (no Android 10), esses arquivos eram armazenados 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
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. Dispositivos que não incluem o módulo Wi-Fi podem continuar usando as APIs @hide
Wi-Fi seguindo estas etapas.
Remova as restrições de visibilidade colocadas em
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 o acesso à biblioteca
@hide
APIs Wi-Fi. Por exemplo, esta é 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
é importante.
Acessar APIs de framework 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 usando 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 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 Teste de compatibilidade do Android (CTS) verifica os recursos do módulo Wi-Fi executando um conjunto abrangente de testes do CTS em todas as versões do módulo. Você também pode executar os testes descritos em Testar, depurar e ajustar o Wi-Fi.