Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
This page was translated by the Cloud Translation API.
Switch to English

Salud de Android

Android 9 incluye android.hardware.health HAL 2.0, una actualización de la versión principal de health@1.0 HAL. Este nuevo HAL tiene las siguientes ventajas:

  • Separación más limpia entre el marco y el código del proveedor.
  • healthd demonio healthd innecesario.
  • Mayor grado de libertad para la personalización del proveedor en los informes de información de salud.
  • Más información sobre el estado del dispositivo que solo la batería.

Android 11 incluye android.hardware.health HAL 2.1, una actualización menor de la versión health@2.0 HAL. Este nuevo HAL tiene las siguientes ventajas:

  • Más fácil de implementar
  • Mejor conformidad con las API 2.0 HAL existentes
  • Mejor separación de agudos en el código de carga en modo apagado
  • Mejor soporte para el marco para indicar el estado de la batería del dispositivo

Requisitos

Los dispositivos que se inician con Android 9 deben proporcionar 2.0 HAL (y no deben proporcionar 1.0 HAL). Los dispositivos que no se inician con Android 9 pero que planean actualizar la imagen del proveedor a Target Framework Compatibility Matrix versión 3 (lanzada en Android 9) deben eliminar las implementaciones de HAL 1.0 existentes y proporcionar HAL 2.0.

Los dispositivos que se inician con Android 11 deben proporcionar 2.1 HAL (y no deben proporcionar 1.0 o 2.0 HAL). Los dispositivos que no se inician con Android 11 pero que planean actualizar la imagen del proveedor a Target Framework Compatibility Matrix versión 5 (lanzada en Android 11) deben eliminar las implementaciones 2.0 HAL existentes y proporcionar 2.1 HAL. También se recomienda que los dispositivos que no se inician con Android 11 y que no planean actualizar la imagen del proveedor proporcionen el 2.1 HAL.

AOSP incluye varias bibliotecas auxiliares diseñadas para ayudarlo a implementar el 2.1 HAL y la transición del antiguo 1.0 HAL.

Terminología

  • health@1.0 : abreviatura de android.hardware.health@1.0 . Se refiere a la versión 1.0 de Health HIDL HAL lanzada en Android 8.0.
  • health@2.0 : abreviatura de android.hardware.health@2.0 . Se refiere a la versión 2.0 de Health HIDL HAL lanzada en Android 9.
  • health@2.1 : abreviatura de android.hardware.health@2.1 . Se refiere a la versión 2.1 de Health HIDL HAL lanzada en Android 11.
  • cargador : ejecutable que se ejecuta en modo apagado y muestra la animación de carga del teléfono.
  • recuperación : ejecutable que se ejecuta en modo de recuperación que debe recuperar información de la batería.
  • healthd : demonio heredado que se ejecuta en Android que recupera información relacionada con la salud y la proporciona al marco.
  • storaged : demonio que se ejecuta en Android que recupera información de almacenamiento y la proporciona al marco.

Salud en Android 8.x

En Android 8.x, el componente de salud funciona como se detalla en el siguiente diagrama:

Salud en Android 8.x

Figura 1 . Salud en Android 8.x

En este diagrama:

  • El framework utiliza una (1) llamada de binder y una (1) llamada de hwbinder para comunicarse con el hardware.
  • healthd enlaza estáticamente con libhealthd_android , libbatterymonitor y libbatteryservice .
  • health@1.0-impl enlaza estáticamente con libhealthd. BOARD .

Cada placa puede personalizar una libhealthd. BOARD diferente libhealthd. BOARD ; se determina en el momento de la compilación a qué cargador, health@1.0-impl y vínculo de recuperación.

Para otros modos:

Modo de recuperación y carga fuera del modo en Android 8.x

Figura 2. Estado en Android 8.x, modo de recuperación y carga fuera de modo

  • cargador se enlaza estáticamente con libhealthd. BOARD , libhealthd_charger y libbatterymonitor .
  • la recuperación enlaza estáticamente con libhealthd. BOARD y libbatterymonitor .

Salud en Android 9

En Android 9, el componente de salud funciona como se detalla en el siguiente diagrama: Salud en Android 9

Figura 3 . Salud en Android 9

El marco intenta recuperar el servicio hwservicemanager de hwservicemanager . Si falla, llama a health@1.0 (en Android 8.x). La ruta del código heredado se mantiene para que la imagen del sistema Android 9 sea compatible con la imagen del proveedor de Android 8.x. El marco no recupera información de ambos HAL porque solo puede existir una versión de servicio (1.0 o 2.0) en el dispositivo.

Para otros modos:

Carga y recuperación en modo desactivado en Android 9

Figura 4. Estado en Android 9, modo de recuperación y carga en modo apagado

Salud en Android 11

En Android 11, el componente de salud funciona como se detalla en el siguiente diagrama:

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

Si la implementación de Health 2.1 no existe, el sistema recurre a la ruta del código heredado como se describe en las secciones anteriores.

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

Interfaz HAL 2.0

Health@2.0 HAL proporciona la misma funcionalidad al marco que el antiguo demonio healthd. También proporciona API que son similares a las que healthd proporcionaba anteriormente como servicio de enlace (es decir, IBatteryPropertiesRegistrar ).

La interfaz principal, IHealth , proporciona las siguientes funciones:

  • registerCallback , para reemplazar IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , para reemplazar IBatteryPropertiesRegistrar.unregisterListener
  • update , para reemplazar IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties se sustituyen por lo siguiente:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Además, IHealth proporciona las siguientes nuevas APIs para storaged para recuperar información relacionada con el almacenamiento específica del proveedor:

  • getStorageInfo
  • getDiskStats

Se @2.0::HealthInfo una nueva estructura, @2.0::HealthInfo , mediante devoluciones de llamada y getHealthInfo . Esta estructura contiene toda la información de salud del dispositivo disponible a través de health@2.0 HAL, que incluye:

  • Información de carga (CA / USB / inalámbrica, corriente, voltaje, etc.)
  • Información de la batería (presencia, nivel de la batería, corriente, voltaje, carga, tecnología, etc.)
  • Información de almacenamiento (información del dispositivo de almacenamiento, estadísticas del disco)

Interfaz HAL 2.1

Health@2.1 HAL admite la carga en modo apagado y proporciona más información sobre la batería.

La interfaz principal, IHealth , proporciona las siguientes funciones adicionales

  • getHealthConfig : para recuperar la configuración de este HAL
  • getHealthInfo_2_1 : una actualización de versión menor a getHealthInfo
  • shouldKeepScreenOn : para determinar si la pantalla debe mantenerse encendida en modo cargador

Además, se requiere la implementación de @2.1::IHealth para admitir @2.1::IHealthInfoCallback para sus funciones heredadas registerCallback y unregisterCallback . La nueva interfaz de devolución de llamada devuelve información de salud al cliente mediante su función healthInfoChanged_2_1 lugar de la función healthInfoChanged heredada.

Se @2.1::HealthInfo una nueva estructura, @2.1::HealthInfo , mediante devoluciones de llamada y getHealthInfo_2_1 . Esta estructura contiene información adicional sobre el estado del dispositivo disponible a través de health@2.0 HAL, que incluye:

  • Nivel de capacidad de la batería
  • Tiempo de carga de la batería al máximo ahora (en segundos)
  • Capacidad de diseño de carga completa de la batería (en μAh)

Para obtener información sobre cómo implementar el servicio de salud, consulte Implementación de salud .