O Android 13 inclui a HAL AIDL android.hardware.health
,
uma conversão da HAL health@2.1. Essa nova HAL tem as seguintes
vantagens:
- Remoção de APIs não utilizadas relacionadas ao carregador
- Remover
StorageAttribute
e campos relacionados não usados - Suporte para carregamento na base.
O Android 11 inclui a HAL android.hardware.health
2.1,
uma pequena atualização da versão da HAL health@2.0. Essa nova HAL tem as seguintes
vantagens:
- Separação mais limpa entre o framework e o código do fornecedor.
- Maior liberdade para personalização do fornecedor nos relatórios de informações de saúde.
- Mais informações sobre a integridade do dispositivo, além da bateria.
A documentação para implementar a HAL Health 2.1 está nesta página como referência.
Requisitos
Esta seção contém requisitos para o Android 11, 12 e 13 ou versões mais recentes.
Dispositivos com o Android 11 e o Android 12
Os dispositivos lançados com o Android 11 e 12 precisam fornecer a HAL 2.1 ou a HAL AIDL. Os dispositivos que não são lançados com o Android 11 ou 12, mas que planejam atualizar a imagem do fornecedor para a versão 5 da matriz de compatibilidade do framework de destino (lançada no Android 11) ou 6 (lançada no Android 12) precisam remover as implementações de HAL 2.0 existentes e fornecer o HAL 2.1 ou o HAL AIDL. Os dispositivos que não são lançados com o Android 11 e que não planejam atualizar a imagem do fornecedor também precisam fornecer o HAL 2.1 ou AIDL.
O AOSP inclui várias bibliotecas auxiliares projetadas para ajudar você a implementar o HAL 2.1 e fazer a transição dos antigos HALs HIDL.
Dispositivos com o Android 13 e versões mais recentes
Os dispositivos lançados com o Android 13 precisam fornecer a HAL AIDL (e não a HAL HIDL). Os dispositivos que não forem lançados com o Android 13, mas que planejam atualizar a imagem do fornecedor para a versão 7 da matriz de compatibilidade do framework de destino (lançada no Android 13), precisam remover as implementações de HAL HIDL atuais e fornecer a HAL AIDL. Os dispositivos que não forem lançados com o Android 13 e que não planejam atualizar a imagem do fornecedor também precisam fornecer a HAL AIDL.
O AOSP inclui várias bibliotecas auxiliares projetadas para ajudar você a implementar o HAL AIDL e a transição das antigas HALs HIDL.
Terminologia
Confira a seguir os termos que você precisa conhecer antes de ler o restante da documentação de integridade do sistema Android:
- health@2.1
- Abreviatura de
android.hardware.health@2.1
. A versão 1 do HIDL de saúde foi lançada no Android 11. - HAL de saúde AIDL
- Abreviatura de
android.hardware.health
. A versão 1 da HAL de saúde AIDL foi lançada no Android 13. - carregador
- Executável em execução no modo de carregamento fora do modo que mostra a animação de carregamento do smartphone.
- recuperação
- Executável em execução no modo de recuperação que precisa recuperar informações da bateria.
- storaged
- Daemon que recupera informações de armazenamento e as fornece ao framework.
Saúde no Android 11 e 12
No Android 11 e 12, o componente de integridade funciona conforme detalhado no diagrama a seguir:
[system]
| getService()
V
[health@2.1-service]
| getService(stub=true)
V
[ health@2.0-impl-2.1-<device>.so ]
| | (device-dependent linkage)
V V
+---------Helper libs for impl--------+ [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl) ] |
| [libbatterymonitor (battery) ] |
+-------------------------------------+
Para outros modos:
[ charger ]
| getService() | (legacy code path)
V +-------------------------------------------------+
[health@2.1-service] |
| getService(stub=true) |
V |
[ health@2.0-impl-2.1-<device>.so ] |
| | (device-dependent linkage) |
V V |
+---------Helper libs for impl--------+ [libhealthd.device] |
| [libhealthloop (uevent, wakealarm)] | |
| [libhealth2impl (IHealth impl) ] | <---------------------------------+
| [libbatterymonitor (battery) ] |
+-------------------------------------+
[recovery]
| getService() w/o hwservicemanager
V
[ health@2.0-impl-2.1-<device>.so ]
| | (device-dependent linkage)
V V
+---------Helper libs for impl--------+ [libhealthd.device]
| [libhealthloop (uevent, wakealarm)] |
| [libhealth2impl (IHealth impl) ] |
| [libbatterymonitor (battery) ] |
+-------------------------------------+
Confira o diagrama simplificado a seguir para diferentes modos:
Figura 1. Infraestrutura da HAL de saúde HIDL 2.1.
Saúde no Android 13
No Android 13, a HAL de saúde AIDL foi introduzida. A Figura 2 detalha como o componente de integridade funciona:
Figura 2. Infraestrutura da HAL de AIDL de saúde.
Interface HAL de HIDL 2.1
O HAL health@2.1 oferece suporte ao carregamento fora do modo e fornece mais informações sobre a bateria.
A interface principal, IHealth, oferece as seguintes funções adicionais:
getHealthConfig
: para recuperar a configuração desse HALgetHealthInfo_2_1
: um upgrade de versão secundária paragetHealthInfo
shouldKeepScreenOn
: para determinar se a tela precisa ser mantida no modo de carregador
Além disso, a implementação de @2.1::IHealth
precisa oferecer suporte a
@2.1::IHealthInfoCallback
para as funções registerCallback
e
unregisterCallback
herdadas. A nova interface de callback retorna informações de integridade
para o cliente usando a função healthInfoChanged_2_1
em vez da
função healthInfoChanged
herdada.
Uma nova struct, @2.1::HealthInfo
, é retornada usando callbacks e
getHealthInfo_2_1
. Essa struct contém outras informações de integridade do dispositivo
disponíveis pela HAL health@2.0, incluindo:
- Nível de capacidade da bateria
- Tempo de carga da bateria até a carga completa (em segundos)
- Capacidade de projeto de carga total da bateria (em μAh)
A Figura 3 mostra um diagrama UML das classes úteis para a implementação do HAL de integridade:
Figura 3. Diagrama UML da HAL de saúde 2.1.
Para informações sobre como implementar o serviço de saúde 2.1, consulte Como implementar o Health 2.1.
Interface AIDL HAL versão 1
Esta seção contém informações sobre a versão 1 da interface HAL da AIDL.
Mudanças na API
A HAL da versão 1 da AIDL oferece suporte a APIs semelhantes à HAL da HIDL 2.1. Em comparação com a interface HIDL 2.1, as seguintes mudanças foram feitas na API:
- As APIs relacionadas ao carregador introduzidas na HAL de HIDL 2.1 não são transferidas para a HAL
AIDL. Como a funcionalidade de carregamento fora do modo existe apenas na partição
/vendor
, as APIs na interface do fornecedor não são necessárias. Para implementar o carregamento fora do modo corretamente, consulte carregador. - O tipo
StorageAttribute
e os campos relacionados são removidos porque não são usados. chargerDockOnline
foi adicionado aHealthInfo
para oferecer suporte ao carregamento na base.
Implementação
A Figura 4 mostra um diagrama UML das classes úteis para a implementação da HAL de saúde AIDL:
Figura 4. Diagrama UML da HAL da AIDL de saúde.
Para informações sobre como implementar o serviço de AIDL de saúde, consulte Como implementar o HAL de AIDL de saúde.
Recuperação
O Android 13 oferece suporte a vinculação na recuperação. A instalação do serviço de AIDL de integridade na recuperação permite que ele seja executado no modo de recuperação.
Para informações sobre como instalar o serviço de AIDL de integridade para recuperação, consulte o seguinte:
Carregador
A funcionalidade de carregamento fora do modo foi movida de /system
para /vendor
. Para
dispositivos lançados com o Android 13, se eles oferecem suporte
ao carregamento fora do modo, o binário do serviço HAL precisa oferecer suporte ao modo de carregador. Para fazer isso,
consulte
como implementar o carregador.
Propriedades do sistema do carregador
As propriedades ro.charger.*
não são mais legíveis pelo binário charger
em
/vendor
. Se o dispositivo tiver alguma das propriedades do sistema ro.charger.*
definidas,
consulte
propriedades do sistema para o carregador.