Estado del sistema Android

Android 13 incluye la HAL de android.hardware.health AIDL, una conversión de la HAL de health@2.1. Este nuevo HAL tiene las siguientes ventajas:

  • Se quitaron las APIs relacionadas con el cargador que no se usaban.
  • Quita los campos StorageAttribute y los campos relacionados que no se usan
  • Admite la carga en la base.

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

  • Separación más clara entre el código del framework y el del proveedor
  • Mayor 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

En esta página, se incluye la documentación para implementar la HAL de Health 2.1 como referencia.

Requisitos

En esta sección, se incluyen los requisitos para Android 11, 12 y 13, o versiones posteriores.

Dispositivos con Android 11 y Android 12

Los dispositivos que se lancen con Android 11 y 12 deben proporcionar la HAL 2.1 o la HAL del AIDL. Los dispositivos que no se lancen con Android 11 o 12, pero que planeen actualizar la imagen del proveedor a la versión 5 (lanzada en Android 11) o 6 (lanzada en Android 12) de la matriz de compatibilidad del framework de destino, deben quitar las implementaciones existentes de la HAL 2.0 y proporcionar la HAL 2.1 o la HAL de AIDL. También se recomienda que los dispositivos que no se lancen con Android 11 y que no planeen actualizar la imagen del proveedor proporcionen la HAL 2.1 o AIDL.

El AOSP incluye varias bibliotecas de ayuda diseñadas para ayudarte a implementar el HAL 2.1 y realizar la transición desde los HAL de HIDL anteriores.

Dispositivos con Android 13 y versiones posteriores

Los dispositivos que se lancen con Android 13 deben proporcionar la HAL de AIDL (y no deben proporcionar la HAL de HIDL). Los dispositivos que no se lancen con Android 13, pero que planeen actualizar la imagen del proveedor a la versión 7 de la matriz de compatibilidad del framework de destino (lanzada en Android 13), deben quitar las implementaciones existentes de la HAL de HIDL y proporcionar la HAL de AIDL. También se recomienda que los dispositivos que no se lancen con Android 13 y que no planeen actualizar la imagen del proveedor proporcionen la HAL del AIDL.

El AOSP incluye varias bibliotecas auxiliares diseñadas para ayudarte a implementar la HAL del AIDL y la transición desde las HALs del HIDL anteriores.

Terminología

A continuación, se indican los términos que debes conocer antes de leer el resto de la documentación sobre el estado del sistema Android:

health@2.1
Abreviatura de android.hardware.health@2.1. La versión 1 del HIDL de salud se lanzó en Android 11.
HAL de AIDL de health
Abreviatura de android.hardware.health. La versión 1 de la HAL de Health AIDL se lanzó en Android 13.
cargador
Ejecutable que se ejecuta en la carga en modo apagado y muestra la animación de carga del teléfono.
recuperación
Es un ejecutable que se ejecuta en el modo de recuperación y que debe recuperar información de la batería.
storaged
Es un daemon que recupera información de almacenamiento y la proporciona al framework.

Estado en Android 11 y 12

En Android 11 y 12, el componente de estado 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)      ] |
+-------------------------------------+

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

Consulta el siguiente diagrama simplificado para ver los diferentes modos:

Infraestructura de la HAL de HIDL de Health 2.1

Figura 1: Infraestructura de la HAL de Health HIDL 2.1

Estado en Android 13

En Android 13, se presenta la HAL del AIDL de Health. En la figura 2, se detalla cómo funciona el componente de salud:

Infraestructura del HAL de AIDL de Health

Figura 2: Infraestructura de la HAL de AIDL de Health

Interfaz de la HAL de HIDL 2.1

La HAL health@2.1 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: Actualización de versión secundaria a getHealthInfo
  • shouldKeepScreenOn: Para determinar si la pantalla debe permanecer encendida en el modo de carga

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 estado al cliente con su función healthInfoChanged_2_1 en lugar de la función healthInfoChanged heredada.

Se devuelve una nueva estructura, @2.1::HealthInfo, con devoluciones de llamadas 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 lo siguiente:

  • Nivel de capacidad de la batería
  • Tiempo de carga de la batería hasta que esté completa (en segundos)
  • Capacidad de diseño de carga completa de la batería (en μAh)

En la figura 3, se muestra un diagrama de UML de las clases útiles para la implementación del HAL de salud:

Diagrama UML del HAL de Health 2.1

Figura 3: Diagrama UML de la HAL de Health 2.1.

Para obtener información sobre la implementación del servicio de Health 2.1, consulta Implementación de Health 2.1.

Versión 1 de la interfaz de la HAL del AIDL

En esta sección, se incluye información sobre la versión 1 de la interfaz HAL de AIDL.

Cambios en la API

La HAL de AIDL versión 1 admite APIs similares a la HAL de HIDL 2.1. En comparación con la interfaz HIDL 2.1, se realizaron los siguientes cambios en la API:

  • Las APIs relacionadas con el cargador que se introdujeron en la HAL de HIDL 2.1 no se portaron a la HAL de AIDL. Dado que la funcionalidad de carga en modo apagado solo se encuentra en la partición /vendor, no se necesitan APIs en la interfaz del proveedor. Para implementar correctamente la carga en modo apagado, consulta cargador.
  • Se quitaron los campos de tipo StorageAttribute y los campos relacionados porque no se usan.
  • Se agregó chargerDockOnline a HealthInfo para admitir la carga en la base.

Implementación

En la Figura 4, se muestra un diagrama de UML de las clases útiles para la implementación de la HAL del AIDL de Health:

Diagrama UML de la HAL de AIDL de Health

Figura 4: Diagrama de UML del HAL de AIDL de Health.

Para obtener información sobre la implementación del servicio de AIDL de Health, consulta Implementación del HAL de AIDL de Health.

Recuperación

Android 13 admite el binder en la recuperación. La instalación del servicio AIDL de Health en la recuperación permite que se ejecute en el modo de recuperación.

Para obtener información sobre cómo instalar el servicio AIDL de salud en la recuperación, consulta lo siguiente:

Cargador

La funcionalidad de carga en modo apagado se movió de /system a /vendor. En el caso de los dispositivos que se lanzan con Android 13, si admiten la carga en modo apagado, el objeto binario del servicio de HAL debe admitir el modo de cargador. Para ello, consulta cómo implementar el cargador.

Propiedades del sistema de carga

El archivo binario charger en /vendor ya no puede leer las propiedades ro.charger.*. Si tu dispositivo tiene alguna de las propiedades del sistema ro.charger.* configuradas, consulta Propiedades del sistema para el cargador.