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 de- frameworks/base/wifi/java)
 
- tests/- android/net/wifi(arquivos de- frameworks/base/wifi/tests)
 
- aidl-export/
- api/
- Android.bp
 
- service/- java/- com/android/server/wifi(arquivos de- frameworks/opt/net/wifi/service/java)
 
- tests/- com/android/server/wifi(arquivos de- frameworks/opt/net/wifi/tests)
 
- proto/
- Android.bp
- proguard.flags
- wifi.rc
 
- OsuLogin/(arquivos de- frameworks/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 de- frameworks/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 pacote- android.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.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
- OsuLogin
- ServiceWifiResources
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.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/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-wifiem- packages/modules/Wifi/framework/Android.bpmudando o atributo- impl_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 um- java_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 de- frameworkna lista de- libs. A ordem das dependências no atributo- libsé 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-jarjare- service-wifi, mude o atributo- sdk_versionpara- core_platform.
- Em ambos - wifi-service-pre-jarjare- service-wifi, adicione- frameworke- android_system_server_stubs_currentao atributo- libs.
- 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.
