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:
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é:
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 HALgetHealthInfo_2_1
: mise à niveau vers une version mineure degetHealthInfo
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é:
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é:
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.