O Android 13 inclui a HAL android.hardware.health AIDL,
uma conversão da HAL health@2.1. Essa nova HAL tem as seguintes vantagens:
- Remover APIs não usadas relacionadas ao carregador
- Remover StorageAttributenão utilizados e campos relacionados
- Suporte para carregamento na base.
O Android 11 inclui a HAL 2.1 android.hardware.health,
uma atualização de versão secundária 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.
- Mais níveis de liberdade para personalização do fornecedor em 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 Android 11 e 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 serão lançados com o Android 11 ou 12, mas planejam atualizar a imagem do fornecedor para a versão 5 (lançada no Android 11) ou 6 (lançada no Android 12) da matriz de compatibilidade do framework de destino, precisam remover as implementações atuais do HAL 2.0 e fornecer o HAL 2.1 ou o HAL AIDL. Também é recomendável que dispositivos que não serão lançados com o Android 11 e não planejam atualizar a imagem do fornecedor forneçam a HAL 2.1 ou AIDL.
O AOSP inclui várias bibliotecas auxiliares projetadas para ajudar você a implementar a HAL 2.1 e fazer a transição das antigas 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 podem fornecer a HAL HIDL). Os dispositivos que não forem lançados com o Android 13, mas planejarem 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 atuais do HIDL HAL e fornecer o AIDL HAL. Também é recomendável que os dispositivos que não forem lançados com o Android 13 e não planejarem atualizar a imagem do fornecedor forneçam a HAL AIDL.
O AOSP inclui várias bibliotecas auxiliares projetadas para ajudar você a implementar o HAL AIDL e a transição dos antigos HALs HIDL.
Terminologia
Confira abaixo os termos que você precisa conhecer antes de ler o restante da documentação sobre a integridade do sistema Android:
- health@2.1
- Abreviação de android.hardware.health@2.1. A versão 1 do HIDL de integridade foi lançada no Android 11.
- HAL de saúde AIDL
- Abreviação de android.hardware.health. A versão 1 da HAL de saúde AIDL foi lançada no Android 13.
- charger
- Executável em execução no carregamento no modo desligado que mostra a animação de carregamento do smartphone.
- recovery
- 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 saúde funciona:
Figura 2. Infraestrutura da HAL de saúde AIDL.
Interface HAL HIDL 2.1
A HAL health@2.1 oferece suporte ao carregamento no modo desligado e fornece mais informações sobre a bateria.
A interface principal, IHealth, oferece as seguintes funções adicionais:
- getHealthConfig: para recuperar a configuração dessa HAL
- getHealthInfo_2_1: um upgrade de versão secundária para- getHealthInfo
- shouldKeepScreenOn: para determinar se a tela deve permanecer ligada no modo carregador
Além disso, a implementação de @2.1::IHealth é necessária para oferecer suporte a
@2.1::IHealthInfoCallback para as funções herdadas registerCallback e
unregisterCallback. A nova interface de callback retorna informações de integridade ao 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 na HAL health@2.0, incluindo:
- Nível de capacidade da bateria
- Tempo de carregamento 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 da 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 Implementar o Health 2.1.
Interface HAL AIDL versão 1
Esta seção contém informações sobre a versão 1 da interface AIDL HAL.
Mudanças na API
A HAL AIDL versão 1 é compatível com APIs semelhantes à HAL 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 HIDL 2.1 não são transferidas para a HAL AIDL. Como a funcionalidade de carregamento no modo desligado fica apenas na partição
/vendor, não são necessárias APIs na interface do fornecedor. Para implementar o carregamento no modo desligado corretamente, consulte charger.
- Os campos "Tipo" StorageAttributee relacionados foram removidos porque não são usados.
- chargerDockOnlinefoi adicionado a- HealthInfopara oferecer compatibilidade com o carregamento por dock.
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 do HAL de saúde AIDL.
Para informações sobre como implementar o serviço AIDL de saúde, consulte Implementar o HAL AIDL de saúde.
Recuperação
O Android 13 é compatível com o binder na recuperação. A instalação do serviço AIDL de integridade para recuperação permite que ele seja executado no modo de recuperação.
Para informações sobre como instalar o serviço AIDL de integridade na recuperação, consulte o seguinte:
Carregador
A funcionalidade de carregamento no modo desligado foi movida de /system para /vendor. Para
dispositivos lançados com o Android 13, se eles forem compatíveis com
carregamento no modo desligado, o binário do serviço HAL precisará ser compatível com o modo de carregador. Para fazer isso, consulte implementar carregador.
Propriedades do sistema do carregador
As propriedades ro.charger.* não podem mais ser lidas pelo binário charger em
/vendor. Se o dispositivo tiver alguma das propriedades do sistema ro.charger.* definidas, consulte propriedades do sistema para carregador.
