État du système Android

Android 13 inclut le HAL AIDL android.hardware.health, une conversion du HAL health@2.1. Ce nouveau HAL présente les avantages suivants:

  • Suppression des API inutilisées liées au chargeur
  • Suppression des StorageAttribute et des champs associés inutilisés
  • Prise en charge de la recharge sur station d'accueil.

Android 11 inclut la version 2.1 du HAL android.hardware.health, une mise à niveau mineure de la version 2.0 du HAL health@. Ce nouveau HAL présente les avantages suivants:

  • Séparation plus nette entre le framework et le code du fournisseur.
  • Plus de liberté pour la personnalisation des fournisseurs dans les rapports sur les informations de santé.
  • Plus d'informations sur l'état de l'appareil que la batterie

La documentation d'implémentation de la HAL Health 2.1 est disponible sur cette page à titre de référence.

Conditions requises

Cette section contient les exigences pour Android 11, 12 et 13 ou version ultérieure.

Appareils équipés d'Android 11 et d'Android 12

Les appareils lancés avec Android 11 et 12 doivent fournir le HAL 2.1 ou le HAL AIDL. Les appareils qui ne sont pas lancés avec Android 11 ou 12, mais qui prévoient de mettre à jour l'image du fournisseur vers la version 5 de la matrice de compatibilité du framework cible (publiée dans Android 11) ou la version 6 (publiée dans Android 12) doivent supprimer les implémentations HAL 2.0 existantes et fournir le HAL 2.1 ou le HAL AIDL. Nous vous recommandons également de fournir la version 2.1 ou l'HAL AIDL pour les appareils qui ne démarrent pas avec Android 11 et qui ne prévoient pas de mettre à jour l'image du fournisseur.

AOSP inclut plusieurs bibliothèques d'assistance conçues pour vous aider à implémenter le HAL 2.1 et à passer des anciens HAL HIDL.

Appareils équipés d'Android 13 ou version ultérieure

Les appareils lancés avec Android 13 doivent fournir le HAL AIDL (et ne doivent pas fournir le HAL HIDL). Les appareils qui ne sont pas lancés avec Android 13, mais qui prévoient de mettre à jour l'image du fournisseur vers la version 7 de la matrice de compatibilité du framework cible (publiée dans Android 13) doivent supprimer les implémentations HAL HIDL existantes et fournir le HAL AIDL. Il est également recommandé de fournir le HAL AIDL pour les appareils qui ne sont pas lancés avec Android 13 et qui ne prévoient pas de mettre à jour l'image du fournisseur.

AOSP inclut plusieurs bibliothèques d'assistance conçues pour vous aider à implémenter le HAL AIDL et la transition depuis les anciens HAL HIDL.

Terminologie

Vous trouverez ci-dessous les termes que vous devez connaître avant de lire le reste de la documentation sur l'état du système Android:

health@2.1
Abréviation de android.hardware.health@2.1. La version 1 de HIDL Santé a été publiée dans Android 11.
HAL AIDL de santé
Abréviation de android.hardware.health. La version 1 de la HAL AIDL Santé a été publiée dans Android 13.
chargeur
Exécutable exécuté en mode hors tension qui affiche l'animation de recharge du téléphone.
recovery
Exécutable exécuté en mode récupération qui doit récupérer des informations sur la batterie.
storaged
Démon
qui récupère des informations de stockage et les fournit au framework.

Santé sous Android 11 et 12

Sous Android 11 et 12, le composant d'état fonctionne comme indiqué dans le schéma suivant:

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

Pour les autres modes:

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

Consultez le schéma simplifié suivant pour les différents modes:

Infrastructure HIDL HAL 2.1 pour la santé

Figure 1 : Infrastructure HIDL HAL 2.1 de santé.

Santé dans Android 13

Dans Android 13, le HAL AIDL de santé est introduit. La figure 2 détaille le fonctionnement du composant de santé:

Infrastructure HAL Health AIDL

Figure 2. Infrastructure HAL Health AIDL.

Interface HAL HIDL 2.1

La HAL health@2.1 est compatible avec la recharge hors mode et fournit plus d'informations sur la batterie.

L'interface principale, IHealth, fournit les fonctions supplémentaires suivantes :

  • getHealthConfig: pour récupérer la configuration de ce HAL
  • getHealthInfo_2_1: mise à niveau vers une version mineure de getHealthInfo
  • shouldKeepScreenOn: pour déterminer si l'écran doit rester allumé en mode chargeur

De plus, l'implémentation de @2.1::IHealth est requise pour prendre en charge @2.1::IHealthInfoCallback pour ses fonctions registerCallback et unregisterCallback héritées. La nouvelle interface de rappel renvoie des informations sur l'état de santé au client à l'aide de sa fonction healthInfoChanged_2_1 au lieu de la fonction healthInfoChanged héritée.

Une nouvelle struct, @2.1::HealthInfo, est renvoyée à l'aide de rappels et de getHealthInfo_2_1. Cette struct contient des informations supplémentaires sur l'état de l'appareil disponibles via le HAL health@2.0, y compris les éléments suivants:

  • Niveau de la capacité de la batterie
  • Temps de recharge de la batterie pour une recharge complète (en secondes)
  • Capacité de conception de la batterie à pleine charge (en μAh)

La figure 3 montre un diagramme UML des classes utiles à l'implémentation du HAL de santé:

Schéma UML HAL Health 2.1

Figure 3. Schéma UML de Health HAL 2.1.

Pour en savoir plus sur l'implémentation du service Santé 2.1, consultez la section Implémenter Santé 2.1.

Version 1 de l'interface HAL AIDL

Cette section contient des informations sur la version 1 de l'interface HAL AIDL.

Modifications apportées à l'API

Le HAL de la version 1 d'AIDL est compatible avec des API similaires à celles du HAL HIDL 2.1. Par rapport à l'interface HIDL 2.1, les éléments suivants sont modifiés dans l'API:

  • Les API liées au chargeur introduites dans le HAL HIDL 2.1 ne sont pas portées vers le HAL AIDL. Étant donné que la fonctionnalité de recharge hors mode ne réside que sur la partition /vendor, les API sur l'interface du fournisseur ne sont pas nécessaires. Pour implémenter correctement la recharge hors mode, consultez charger.
  • Le type StorageAttribute et les champs associés sont supprimés, car ils ne sont pas utilisés.
  • chargerDockOnline est ajouté à HealthInfo pour permettre la recharge sur la station d'accueil.

Implémentation

La figure 4 montre un diagramme UML des classes utiles à l'implémentation de l'HAL AIDL de santé:

Schéma UML HAL AIDL Santé

Figure 4. Schéma UML HAL AIDL de santé.

Pour en savoir plus sur l'implémentation du service AIDL Santé, consultez la section Implémenter le HAL AIDL Santé.

Récupération

Android 13 est compatible avec le liaisonneur en mode récupération. L'installation du service AIDL Santé dans la récupération lui permet de s'exécuter en mode récupération.

Pour en savoir plus sur l'installation du service AIDL de santé en récupération, consultez les ressources suivantes:

Chargeur

La fonctionnalité de recharge hors mode est déplacée de /system vers /vendor. Pour les appareils lancés avec Android 13, s'ils sont compatibles avec la recharge hors tension, le binaire du service HAL doit être compatible avec le mode chargeur. Pour ce faire, consultez la section Implémenter un chargeur.

Propriétés système du chargeur

Les propriétés ro.charger.* ne sont plus lisibles par le binaire charger dans /vendor. Si l'une des propriétés système ro.charger.* est définie sur votre appareil, consultez les propriétés système pour le chargeur.