Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Salud de Android

Android 9 incluye android.hardware.health HAL 2.0, una importante actualización de la versión 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.
  • Desaprueba la innecesaria healthd demonio.
  • 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 de versión menor del 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 1.0 HAL existentes y proporcionar 2.0 HAL.

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 la HAL 2.1.

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: Funcionamiento ejecutable en modo apagado de carga que muestra la animación de teléfono de colocación.
  • recuperación: Funcionamiento ejecutable en modo de recuperación que se debe recuperar la información de la batería.
  • healthd: legado demonio que se ejecuta en Android que recupera la 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 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 a binder y una (1) llamada hwbinder para comunicarse con el hardware.
  • healthd vincula estáticamente a libhealthd_android , libbatterymonitor y libbatteryservice .
  • health@1.0-impl estáticamente enlaces a libhealthd. BOARD .

Cada tarjeta puede personalizar un 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 apagado y modo de recuperación en Android 8.x

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

  • cargador se vincula estáticamente a libhealthd. BOARD , libhealthd_charger y libbatterymonitor .
  • la recuperación se vincula estáticamente a 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

Los intentos marco para recuperar el servicio de health@2.0 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. Salud en Android 9, fuera de modo de carga y el modo de recuperación

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 APIs que son similares a lo que healthd proporcionado previamente como un servicio de aglutinante (es decir IBatteryPropertiesRegistrar ).

La interfaz principal, iHealth , proporciona las siguientes funciones:

  • registerCallback , para reemplazar IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , para reemplazar IBatteryPropertiesRegistrar.unregisterListener
  • update , reemplazar IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties se sustituyen por los siguientes:
    • 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

Una nueva estructura, @2.0::HealthInfo , se devuelve a través de 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 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 : determinar si la pantalla debe mantenerse en el modo de cargador

Además, la implementación de @2.1::IHealth es necesario para el apoyo @2.1::IHealthInfoCallback por sus heredados registerCallback y unregisterCallback funciones. La nueva interfaz de devolución de llamada retorna información de salud médica para el cliente utilizando su healthInfoChanged_2_1 función en lugar de la hereditaria healthInfoChanged función.

Una nueva estructura, @2.1::HealthInfo , se devuelve a través de 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 la implementación del servicio de salud, consulte Implementación de la Salud .