Estado del sistema Android

Android 13 incluye la HAL de AIDL de android.hardware.health, 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 relacionados que no se usan
  • Admite la carga en la estación.

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

  • Separación más clara entre el framework y el código del proveedor.
  • Mayores grados de libertad para la personalización de proveedores en los informes de información de salud
  • Más información sobre el estado del dispositivo que solo la batería.

La documentación para implementar el HAL de Health 2.1 se encuentra en esta página como referencia.

Requisitos

Esta sección contiene los requisitos para Android 11, 12 y 13 o versiones posteriores.

Dispositivos con Android 11 y Android 12

Los dispositivos que se lanzan con Android 11 y 12 deben proporcionar la HAL 2.1 o la HAL de AIDL. Los dispositivos que no se inicien 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 HAL 2.0 y proporcionar la HAL 2.1 o la HAL de AIDL. También se recomienda que los dispositivos que no se inicien con Android 11 y que no planeen actualizar la imagen del proveedor proporcionen el HAL 2.1 o AIDL.

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 de HAL de HIDL existentes y proporcionar la HAL de AIDL. También se recomienda que los dispositivos que no se inicien con Android 13 y que no planeen actualizar la imagen del proveedor proporcionen la HAL de AIDL.

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

Terminología

A continuación, se incluyen 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 de 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 AIDL de Health se lanzó en Android 13.
cargador
Ejecutable que se ejecuta en la carga en modo de apagado que muestra la animación de carga del teléfono.
recuperación
Ejecutable que se ejecuta en modo de recuperación y que debe recuperar información de la batería.
almacenado
Daemon
que recupera información de almacenamiento y la proporciona al framework.

Salud 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, haz lo siguiente:

[       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 2.1 de HIDL de Health

Figura 1: Infraestructura de la HAL 2.1 de HIDL de Health

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 estado:

Infraestructura del HAL de AIDL de Health

Figura 2: Infraestructura de HAL de AIDL de Health

Interfaz de la HAL de HIDL 2.1

El HAL de health@2.1 admite la carga fuera del modo 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 secundaria a getHealthInfo
  • shouldKeepScreenOn: Para determinar si la pantalla debe permanecer encendida en el modo de cargador

Además, la implementación de @2.1::IHealth es necesaria para admitir @2.1::IHealthInfoCallback para sus funciones registerCallback y unregisterCallback heredadas. La nueva interfaz de devolución de llamada muestra información de estado al cliente con su función healthInfoChanged_2_1 en lugar de la función healthInfoChanged heredada.

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

  • Nivel de capacidad de la batería
  • Tiempo de carga de la batería hasta el 100% (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 de HAL de estado:

Diagrama de UML del HAL de Health 2.1

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

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

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

Esta sección contiene información sobre la versión 1 de la interfaz de HAL de AIDL.

Cambios en la API

La HAL de AIDL versión 1 admite APIs similares a las de la HAL de HIDL 2.1. En comparación con la interfaz HIDL 2.1, se cambiaron los siguientes elementos 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. Debido a que la funcionalidad de carga en modo de apagado solo se encuentra en la partición /vendor, no se necesitan las APIs de la interfaz del proveedor. Para implementar la carga fuera del modo de suspensión correctamente, consulta cargador.
  • Se quitaron el tipo StorageAttribute y los campos relacionados porque no se usan.
  • Se agregó chargerDockOnline a HealthInfo para admitir la carga en la estación.

Implementación

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

Diagrama UML del HAL de AIDL de Health

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

Para obtener información sobre la implementación del servicio de AIDL de salud, consulta Cómo implementar el HAL de AIDL de salud.

Recuperación

Android 13 admite Binder en el modo de recuperación. Instalar el servicio AIDL de Health en la recuperación le permite ejecutarse en modo de recuperación.

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

Cargador

La funcionalidad de carga en modo de apagado se movió de /system a /vendor. En el caso de los dispositivos que se inician con Android 13, si admiten la carga en modo de 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 del cargador

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