O módulo Wi-Fi é atualizável, o que significa que pode receber atualizações de funcionalidades fora do ciclo normal de lançamento 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 obtêm uma experiência Wi-Fi consistente em dispositivos Android e corrige problemas de interoperabilidade por meio de atualizações de módulo.
Os desenvolvedores de aplicativos obtêm fragmentação de plataforma reduzida.
Os OEMs podem atender aos requisitos da operadora e, ao mesmo tempo, 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 Android 12
-
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 Overlay APK é armazenado aqui)-
res/
(novo no Android 11, configurações de Wi-Fi extraídas deframeworks/base/core/res/res
) -
AndroidManifest.xml
-
Android.bp
-
-
Os diretórios acima também contêm código que permanece fora do componente modular do sistema e em sua localização atual, por exemplo:
-
wificond interface
(classes no pacoteandroid.net.wifi.nl80211
, por exemplo,WifiNl80211Manager
) - Exemplo de aplicativo 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 seus patches dos diretórios do projeto original para o novo diretório do projeto.
Movendo um patch de frameworks/base/wifi
Gerando o arquivo de patch em root/frameworks/base/wifi
git format-patch -1 commit --stdout > patch-file.txt
Aplicando o arquivo de patch para root/packages/modules/Wifi
git am -p2 --directory=framework/ patch-file.txt
Movendo 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 commits, um para service/
e outro para tests/
.
Migrando 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
Gerando 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
Aplicando os dois patches a pacotes/módulos/Wifi
git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt
Esmagando os dois commits de volta em um commit
git rebase -i
Altere a operação do segundo commit para squash
.
Edite a mensagem de confirmação conforme apropriado.
Limite do módulo para Android 11
O serviço Wi-Fi continua a ser executado dentro do processo de serviço do sistema. O módulo Wi-Fi inclui todos os códigos 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 a fazer parte da compilação 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. Para reduzir o esforço envolvido na portabilidade de alterações de local de arquivo, recomendamos upstream o máximo possível de alterações 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 AOSP.
Formato do módulo
O módulo Wi-Fi ( com.google.android.wifi.apex
) está no formato APEX e está disponível para dispositivos com Android 11 ou superior. O arquivo APEX inclui os seguintes componentes.
- Biblioteca SDK (
framework-wifi.jar
) - Biblioteca de serviços (
service-wifi.jar
) - OsuLogin APK (
OsuLoginGoogle.apk
) - APK de recursos (
ServiceWifiResourcesGoogle.apk
) - Certificados WFA
Dependências do módulo
O módulo Wi-Fi depende dos seguintes componentes.
- Conectividade
- Telefonia
- Proto-bibliotecas
- Componentes diversos do sistema
- HALs de Wi-Fi
-
wificond
-
bouncycastle
-
ksoap2
-
libnanohttpd
Este módulo interage com a estrutura usando apenas @SystemApi
estável (sem uso de API @hide
) e é assinado com uma assinatura do Google em vez de uma assinatura de plataforma.
Personalização
O módulo Wi-Fi não oferece suporte à personalização direta, mas você pode personalizar a configuração usando sobreposições de recursos de tempo de execução (RROs) ou configurações de operadora.
Figura 2. Personalização do módulo Wi-Fi
- Para pequenas personalizações, habilite ou desabilite as configurações na
config
do RRO. - Para obter mais controle, personalize os valores de configuração para qualquer chave de configuração da operadora exposta como
@SystemAPI
.
Usando sobreposições de recursos de tempo de execução
Você pode personalizar o módulo Wi-Fi substituindo as configurações padrão usando RROs. Para obter uma lista de configurações sobrepostas, consulte packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xml
. Para obter detalhes sobre o comportamento de configuração, consulte packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml
. Para um aplicativo de sobreposição de amostra, consulte device/google/coral/rro_overlays/WifiOverlay/
.
Porque 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 do pacote com.google.android.wifi.resources
, você deve definir o destino do targetPackage
de sobreposição como com.google.android.wifi.resources
para sobrepor as configurações de Wi-Fi com sucesso.
Migrando o formato de armazenamento de configuração
O módulo Wi-Fi pode analisar apenas o formato de armazenamento de configuração Wi-Fi AOSP. Se você modificou anteriormente o formato de armazenamento de configuração de Wi-Fi (que inclui a lista de redes salvas do usuário), deverá converter esses dados para o formato AOSP ao atualizar um dispositivo para qualquer versão do Android que inclua o módulo Wi-Fi. Os ganchos necessários para esta 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 Wi-Fi que foi convertido para o formato AOSP.
Esses arquivos foram anteriormente (no Android 10) armazenados na pasta
/data/misc/wifi
no dispositivo.
WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)
Invocado pelo módulo Wi-Fi para recuperar o conteúdo do arquivo de armazenamento específico do usuário Wi-Fi que foi convertido para o formato AOSP.
Esses arquivos foram armazenados anteriormente (no Android 10) na pasta
/data/misc_ce/<userId>/wifi
no dispositivo.
Acessando APIs Wi-Fi ocultas
Símbolos (classes, métodos, campos etc.) anotados com @hide
no módulo Wi-Fi não fazem parte de sua superfície de 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 @hide
Wi-Fi APIs seguindo as etapas a seguir.
Remova as restrições de visibilidade colocadas no
framework-wifi
empackages/modules/Wifi/framework/Android.bp
alterando o atributoimpl_library_visibility
para public.java_sdk_library { name: "framework-wifi", ... impl_library_visibility: [ "//visibility:public", // Add this rule and remove others. ], ... }
Altere a regra de compilação para permitir o acesso à biblioteca
@hide
Wi-Fi APIs. Por exemplo, a seguir está uma regra de construção para umjava_library
.java_library { name: "foo-lib", // no sdk_version attribute defined libs: [ "dependency1", "dependency2", ], }
Para permitir o acesso à biblioteca para
foo-lib
, altere a regra de compilação conforme mostrado abaixo.java_library { name: "foo-lib", sdk_version: "core_platform", libs: [ "framework-wifi.impl", "framework", "dependency1", "dependency2", ], }
Certifique-se de que
framework-wifi.impl
apareça antes doframework
na lista delibs
. A ordem das dependências no atributolibs
é significativa.
Acessando APIs de estrutura oculta
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 a usar @hide
APIs externas (por exemplo, de framework.jar
) em service-wifi
fazendo as seguintes modificações em frameworks/opt/net/wifi/service/Android.bp
.
Em
wifi-service-pre-jarjar
eservice-wifi
, altere o atributosdk_version
paracore_platform
.Em
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 Android Compatibility Test Suite (CTS) verifica a funcionalidade do módulo Wi-Fi executando um conjunto abrangente de testes CTS em cada versão do módulo. Você também pode executar os testes descritos em Teste, depuração e ajuste de Wi-Fi .