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 :
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 :
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 HALgetHealthInfo_2_1
: mise à niveau vers la version mineuregetHealthInfo
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é :
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é :
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.