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/Wififrameworkjava/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.bpproguard.flagswifi.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.xmlAndroid.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.xmlAndroid.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
WifiTrackerLiblibwifi_hallibwifi_systemlibwifi_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.txtAplicar o arquivo de patch a root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txtMover 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-commitgit 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.txtgit format-patch -1 test-commit --stdout > test-patch.txt
Aplicar os dois patches a packages/modules/Wifi
git am service-patch.txtgit am -p1 --directory=service/ test-patch.txt
Unindo os dois commits em um só
git rebase -iMude 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,WifiScannerServiceeWifiRttService OsuLoginServiceWifiResources
O módulo exclui os seguintes componentes, que continuam fazendo parte do build do AOSP do OEM.
- Componente nativo
wificondemsystem/connectivity/wificond - Interface
wificond(classes no pacoteandroid.net.wifi.nl80211, por exemplo,WifiNl80211Manager) android.net.wifi.SoftApConfToXmlMigrationUtilandroid.net.wifi.WifiNetworkScoreCacheandroid.net.wifi.WifiMigrationWifiTrackerLiblibwifi_hallibwifi_systemlibwifi_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
wificondbouncycastleksoap2libnanohttpd
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/wifido 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>/wifido 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-wifiempackages/modules/Wifi/framework/Android.bpmudando o atributoimpl_library_visibilitypara 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
@hideAPIs 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.implaparece antes deframeworkna 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-jarjareservice-wifi, mude o atributosdk_versionparacore_platform.Em ambos
wifi-service-pre-jarjareservice-wifi, adicioneframeworkeandroid_system_server_stubs_currentao 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.