O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Android Health

O Android 9 inclui android.hardware.health HAL 2.0, uma atualização de versão principal de health@1.0 HAL. Este novo HAL tem as seguintes vantagens:

  • Separação mais limpa entre a estrutura e o código do fornecedor.
  • healthd daemon healthd desnecessário.
  • Maior grau de liberdade para personalização do fornecedor em relatórios de informações de saúde.
  • Mais informações sobre a saúde do dispositivo do que apenas bateria.

O Android 11 inclui android.hardware.health HAL 2.1, uma atualização de versão secundária de health@2.0 HAL. Este novo HAL tem as seguintes vantagens:

  • Mais fácil de implementar
  • Melhor conformidade com APIs HAL 2.0 existentes
  • Melhor separação de agudos no código de cobrança em modo desligado
  • Melhor suporte para a estrutura para indicar a integridade da bateria do dispositivo

Requisitos

Os dispositivos lançados com o Android 9 devem fornecer o HAL 2.0 (e não devem fornecer o HAL 1.0). Os dispositivos que não iniciam com o Android 9, mas planejam atualizar a imagem do fornecedor para Target Framework Compatibility Matrix versão 3 (lançada no Android 9), devem remover as implementações 1.0 HAL existentes e fornecer 2.0 HAL.

Os dispositivos lançados com o Android 11 devem fornecer o HAL 2.1 (e não devem fornecer o HAL 1.0 ou 2.0). Os dispositivos que não iniciam com o Android 11, mas planejam atualizar a imagem do fornecedor para Target Framework Compatibility Matrix versão 5 (lançada no Android 11), devem remover as implementações 2.0 HAL existentes e fornecer 2.1 HAL. Dispositivos que não iniciam com o Android 11 e não planejam atualizar a imagem do fornecedor também são recomendados para fornecer o 2.1 HAL.

O AOSP inclui várias bibliotecas auxiliares projetadas para ajudá-lo a implementar o HAL 2.1 e a transição do HAL 1.0 antigo.

Terminologia

  • health@1.0 : abreviatura de android.hardware.health@1.0 . Refere-se à saúde HIDL HAL versão 1.0 lançada no Android 8.0.
  • health@2.0 : abreviatura de android.hardware.health@2.0 . Refere-se à saúde HIDL HAL versão 2.0 lançada no Android 9.
  • health@2.1 : abreviatura de android.hardware.health@2.1 . Refere-se à saúde HIDL HAL versão 2.1 lançada no Android 11.
  • carregador : executável em execução no modo de carregamento desligado que exibe a animação de carregamento do telefone.
  • recovery : executável rodando em modo de recuperação que deve recuperar informações da bateria.
  • healthd : daemon legado em execução no Android que recupera informações relacionadas à saúde e as fornece ao framework.
  • storaged : daemon em execução no Android que recupera informações de armazenamento e as fornece ao framework.

Saúde no Android 8.x

No Android 8.x, o componente de integridade funciona conforme detalhado no diagrama a seguir:

Saúde no Android 8.x

Figura 1 . Saúde no Android 8.x

Neste diagrama:

  • Uma (1) chamada de binder e uma (1) chamada de hwbinder são usadas pela estrutura para se comunicar com o hardware.
  • healthd vincula-se estaticamente a libhealthd_android , libbatterymonitor e libbatteryservice .
  • health@1.0-impl vincula estaticamente a libhealthd. BOARD .

Cada placa pode personalizar um libhealthd. BOARD diferente libhealthd. BOARD ; é determinado no momento da criação para qual link carregador, health@1.0-impl e recuperação.

Para outros modos:

Modo desligado e modo de recuperação no Android 8.x

Figura 2. Saúde no Android 8.x, modo de carregamento e modo de recuperação desligado

  • carregador está estaticamente libhealthd. BOARD a libhealthd. BOARD , libhealthd_charger e libbatterymonitor .
  • a recuperação se vincula estaticamente ao libhealthd. BOARD e libbatterymonitor .

Saúde no Android 9

No Android 9, o componente de integridade funciona conforme detalhado no diagrama a seguir:Saúde no Android 9

Figura 3 . Saúde no Android 9

A estrutura tenta recuperar o serviço hwservicemanager do hwservicemanager . Se falhar, ele chama health@1.0 (no Android 8.x). O caminho do código legado é mantido para que a imagem do sistema Android 9 seja compatível com a imagem do fornecedor do Android 8.x. A estrutura não recupera informações de ambos os HALs porque apenas uma versão de serviço (1.0 ou 2.0) pode existir no dispositivo.

Para outros modos:

Charing e recuperação fora do modo no Android 9

Figura 4. Saúde no Android 9, modo de carregamento e modo de recuperação desligado

Saúde no Android 11

No Android 11, 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)      ] |
+-------------------------------------+

Se a implementação de integridade 2.1 não existir, o sistema retornará ao caminho do código legado, conforme descrito nas seções anteriores

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)      ] |
+-------------------------------------+

Interface HAL 2.0

O HAL health@2.0 fornece a mesma funcionalidade para a estrutura que o antigo daemon healthd. Ele também fornece APIs semelhantes ao que healthd fornecia anteriormente como um serviço de fichário (ou seja, IBatteryPropertiesRegistrar ).

A interface principal, IHealth , fornece as seguintes funções:

  • registerCallback , para substituir IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , para substituir IBatteryPropertiesRegistrar.unregisterListener
  • update , para substituir IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties são substituídos pelo seguinte:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Além disso, IHealth fornece as seguintes novas APIs para storaged para recuperar informações relacionadas ao armazenamento específico do fornecedor:

  • getStorageInfo
  • getDiskStats

Uma nova estrutura, @2.0::HealthInfo , é retornada por meio de retornos de chamada e getHealthInfo . Esta estrutura contém todas as informações de integridade do dispositivo disponíveis por meio de health@2.0 HAL, incluindo:

  • Informações de carregamento (AC / USB / sem fio, corrente, voltagem, etc.)
  • Informações da bateria (presença, nível da bateria, corrente, tensão, carga, tecnologia, etc.)
  • Informações de armazenamento (informações do dispositivo de armazenamento, estatísticas do disco)

Interface HAL 2.1

O HAL health@2.1 oferece suporte para carregamento no modo desligado e fornece mais informações sobre a bateria.

A interface principal, IHealth , fornece as seguintes funções adicionais

  • getHealthConfig : para recuperar a configuração deste HAL
  • getHealthInfo_2_1 : uma atualização de versão secundária para getHealthInfo
  • shouldKeepScreenOn : para determinar se a tela deve ser mantida no modo carregador

Além disso, a implementação de @2.1::IHealth é necessária para suportar @2.1::IHealthInfoCallback para suas funções herdadas registerCallback e unregisterCallback . A nova interface de retorno de chamada retorna informações de saúde de saúde ao cliente usando sua função healthInfoChanged_2_1 vez da função herdada healthInfoChanged .

Uma nova estrutura, @2.1::HealthInfo , é retornada por meio de retornos de chamada e getHealthInfo_2_1 . Esta estrutura contém informações adicionais sobre a integridade do dispositivo disponíveis por meio de health@2.0 HAL, incluindo:

  • Nível de capacidade da bateria
  • Tempo de carga da bateria totalmente agora (em segundos)
  • Capacidade de design de carga total da bateria (em μAh)

Para obter informações sobre como implementar o serviço de Saúde, consulte Implementando Saúde .