État du système Android

Android 13 inclut android.hardware.health AIDL HAL, une conversion à partir de health@2.1 HAL. Cette nouvelle HAL présente les avantages suivants :

  • Suppression des API inutilisées liées au chargeur
  • Supprimer les champs StorageAttribute inutilisés et les champs associés
  • La station de recharge est compatible.

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

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

La documentation pour implémenter 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 (publiée dans Android 11) ou 6 (publiée dans Android 12) de la matrice de compatibilité du framework cible, doivent supprimer les implémentations HAL 2.0 existantes et fournir le HAL 2.1 ou le HAL AIDL. Il est également recommandé aux appareils qui ne sont pas lancés avec Android 11 et qui ne prévoient pas de mettre à jour l'image du fournisseur de fournir le HAL 2.1 ou AIDL.

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

Appareils équipés d'Android 13 ou d'une 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 HIDL HAL existantes et fournir l'AIDL HAL. Il est également recommandé aux appareils qui ne sont pas lancés avec Android 13 et qui ne prévoient pas de mettre à jour l'image du fournisseur de fournir le HAL AIDL.

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

Terminologie

Voici quelques termes à 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 du HIDL de santé est sortie dans Android 11.
health AIDL HAL
Abréviation de android.hardware.health. La version 1 du HAL AIDL de santé est sortie dans Android 13.
charger
Exécutable s'exécutant en mode Recharge hors tension et affichant l'animation de recharge du téléphone.
recovery
Exécutable s'exécutant en mode Récupération et devant récupérer les informations sur la batterie.
storaged
Démon
qui récupère les informations de stockage et les fournit au framework.

Santé dans Android 11 et 12

Dans Android 11 et 12, le composant Health 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 découvrir les différents modes :

Infrastructure HIDL HAL 2.1 de Health

Figure 1 : Infrastructure Health HIDL HAL 2.1.

Santé dans Android 13

Dans Android 13, le HAL AIDL de santé est introduit. La figure 2 explique en détail le fonctionnement du composant d'état :

Infrastructure HAL AIDL Santé

Figure 2. Infrastructure HAL AIDL Santé.

Interface HIDL HAL 2.1

Le HAL health@2.1 prend en charge la recharge en mode éteint 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 cette HAL
  • getHealthInfo_2_1 : mise à niveau vers la version mineure 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 structure, @2.1::HealthInfo, est renvoyée à l'aide de rappels et de getHealthInfo_2_1. Cette structure contient des informations supplémentaires sur l'état de l'appareil disponibles via le HAL health@2.0, y compris :

  • Niveau de capacité de la batterie
  • Temps de recharge de la batterie jusqu'à ce qu'elle soit pleine (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 de la couche HAL de santé :

Diagramme UML de la couche d&#39;abstraction matérielle Santé 2.1

Figure 3. Diagramme UML de la couche d'abstraction matérielle Santé 2.1.

Pour savoir comment implémenter le service Santé 2.1, consultez Implémenter Santé 2.1.

Version 1 de l'interface AIDL HAL

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

Modifications apportées à l'API

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

  • Les API liées au chargeur introduites dans HIDL HAL 2.1 ne sont pas portées vers AIDL HAL. Étant donné que la fonctionnalité de recharge en mode éteint n'existe que sur la partition /vendor, les API de l'interface du fournisseur ne sont pas nécessaires. Pour implémenter correctement la recharge en mode éteint, consultez charger.
  • Les champs "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 une station d'accueil.

Implémentation

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

Diagramme UML de la couche d&#39;abstraction matérielle AIDL de Santé

Figure 4. Diagramme UML de la couche d'abstraction matérielle AIDL de Santé.

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

Récupération

Android 13 est compatible avec le binder en mode Recovery. L'installation du service AIDL Health pour la récupération lui permet de s'exécuter en mode Récupération.

Pour savoir comment installer le service AIDL de vérification de l'état pour la récupération, consultez les pages suivantes :

Chargeur

La fonctionnalité de recharge en mode désactivé est déplacée de /system vers /vendor. Pour les appareils lancés avec Android 13, si la recharge hors mode est prise en charge, le binaire du service HAL doit être compatible avec le mode chargeur. Pour ce faire, consultez 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 votre appareil possède l'une des propriétés système ro.charger.*, consultez Propriétés système du chargeur.