Android 9 enthält android.hardware.health
HAL 2.0, ein Major-Versionsupgrade von health@1.0 HAL. Diese neue HAL bietet folgende Vorteile:
- Bessere Trennung zwischen Framework- und Anbietercode.
- Der unnötige
healthd
-Daemon wird eingestellt. - Mehr Flexibilität bei der Anpassung von Berichten zu Gesundheitsinformationen durch Anbieter.
- Nicht nur Informationen zum Akkuzustand, sondern auch zum Gerätezustand
Android 11 enthält android.hardware.health
HAL 2.1, ein Nebenversionsupgrade von health@2.0 HAL. Dieser neue HAL hat die folgenden Vorteile:
- Einfachere Implementierung
- Bessere Konformität mit vorhandenen HAL-APIs 2.0
- Bessere Trennung von Treble im Ladecode im Ruhemodus
- Bessere Unterstützung des Frameworks zur Anzeige des Akkuzustands des Geräts
Android 13 enthält android.hardware.health
AIDL HAL, eine Umwandlung von health@2.1 HAL. Diese neue HAL bietet folgende Vorteile:
- Nicht verwendete ladegerätebezogene APIs entfernen
- Nicht verwendete Felder für „
StorageAttribute
“ und zugehörige Felder entfernen - Unterstützt das Aufladen per Dock.
Voraussetzungen
Geräte mit Android 9 und Android 10
Geräte, die mit Android 9 ausgeliefert werden, müssen die 2.x HAL (nicht die 1.0 HAL) oder die AIDL HAL bereitstellen. Bei Geräten, die nicht mit Android 9 auf den Markt gebracht werden, aber das Anbieter-Image auf Version 3 der Target Framework Compatibility Matrix Version 3 (veröffentlicht in Android 9) aktualisiert werden soll, müssen vorhandene 1.0-HAL-Implementierungen entfernt und 2.x-HAL oder AIDL HAL bereitgestellt werden.
AOSP enthält mehrere Hilfsbibliotheken, die Sie bei der Implementierung der 2.0 HAL und der Umstellung von der alten 1.0 HAL unterstützen.
Geräte mit Android 11 und Android 12
Geräte, die mit Android 11 auf den Markt kommen, müssen die HAL 2.1 (nicht die HAL 1.0 oder 2.0) oder die AIDL HAL bereitstellen. Bei Geräten, die nicht mit Android 11 auf den Markt gekommen sind, aber das Anbieter-Image auf Version 5 der Target Framework Compatibility Matrix Version 5 (veröffentlicht in Android 11) aktualisiert werden soll, müssen vorhandene 2.0-HAL-Implementierungen entfernt und 2.1 HAL oder AIDL HAL bereitgestellt werden. Bei Geräten, die nicht mit Android 11 auf den Markt gebracht werden und keine Aktualisierung des Anbieter-Images geplant ist, wird außerdem empfohlen, HAL 2.1 bereitzustellen.
AOSP enthält mehrere Hilfsbibliotheken, die Ihnen bei der Implementierung der 2.1 HAL und der Umstellung von der alten 1.0 HAL helfen sollen.
Geräte mit Android 13 oder höher
Geräte, die mit Android 13 auf den Markt gebracht werden, müssen die AIDL HAL bereitstellen (und dürfen keine HIDL HAL bereitstellen). Bei Geräten, die nicht unter Android 13 auf den Markt gebracht werden, aber das Anbieter-Image auf Version 7 der Target Framework Compatibility Matrix Version 7 (veröffentlicht in Android 13) aktualisiert werden soll, müssen vorhandene HIDL HAL-Implementierungen entfernt und AIDL HAL bereitgestellt werden. Für Geräte, die nicht mit Android 13 eingeführt werden und für die kein Update des Anbieter-Images geplant ist, wird ebenfalls empfohlen, die AIDL HAL bereitzustellen.
Geräte dürfen nicht die HIDL 1.0 HAL bereitstellen.
AOSP enthält mehrere Hilfsbibliotheken, die Sie bei der Implementierung des AIDL HAL und der Umstellung von den alten HIDL HALs unterstützen.
Terminologie
- health@1.0: Abkürzung für
android.hardware.health@1.0
. Bezieht sich auf die HIDL HAL-Version 1.0 für Gesundheit, die in Android 8.0 veröffentlicht wurde. - health@2.0: Abkürzung für
android.hardware.health@2.0
. Bezieht sich auf die HIDL HAL-Version 2.0 für Gesundheit, die in Android 9 veröffentlicht wurde. - health@2.1: Abkürzung für
android.hardware.health@2.1
. Bezieht sich auf die Integrität von HIDL HAL Version 2.1, die in Android 11 veröffentlicht wurde. - health AIDL HAL: Abkürzung für
android.hardware.health
.- Version 1 wird mit Android 13 veröffentlicht.
- charger: ausführbares Programm, das im Lademodus ausgeführt wird und die Ladeanimation für das Smartphone anzeigt
- recovery: Ausführbares Programm, das im Wiederherstellungsmodus ausgeführt wird und Akkuinformationen abrufen muss.
- healthd: Legacy-Daemon, der unter Android ausgeführt wird und gesundheitsbezogene Informationen abruft und dem Framework zur Verfügung stellt.
- storaged: Ein unter Android ausgeführter Daemon, der Speicherinformationen abrufen und an das Framework weitergeben kann.
Google Fit unter Android 8.x
In Android 8.x funktioniert die Zustandskomponente wie im folgenden Diagramm dargestellt:
Abbildung 1 Google Fit unter Android 8.x
In diesem Diagramm:
- Ein (1) Binder-Aufruf und ein (1) Hwbinder-Aufruf werden vom Framework für die Kommunikation mit der Hardware verwendet.
healthd
ist statisch mitlibhealthd_android
,libbatterymonitor
undlibbatteryservice
verknüpft.- health@1.0-impl verweist statisch auf
libhealthd.BOARD
.
Für jedes Board kann eine andere libhealthd.BOARD
angepasst werden. Beim Build wird festgelegt, welches Ladegerät, welche health@1.0-Implementierung und welcher Wiederherstellungslink verwendet werden soll.
Für andere Modi:
Abbildung 2. Akkuzustand in Android 8.x, Laden im Aus-Modus und Wiederherstellungsmodus
- „Ladegerät“ ist statisch mit
libhealthd.BOARD
,libhealthd_charger
undlibbatterymonitor
verknüpft. - recovery ist statisch mit
libhealthd.BOARD
undlibbatterymonitor
verknüpft.
Gesundheit in Android 9
In Android 9 funktioniert die Zustandskomponente wie im folgenden Diagramm dargestellt:
Abbildung 3 Google Fit in Android 9
Das Framework versucht, den health@2.0-Dienst von hwservicemanager
abzurufen.
Wenn der Vorgang fehlschlägt, wird health@1.0 (in Android 8.x) aufgerufen. Der Pfad für den alten Code wird beibehalten, damit das Android 9-System-Image mit dem Android 8.x-Anbieter-Image kompatibel ist. Das Framework ruft keine Informationen aus beiden HALs ab, da auf dem Gerät nur eine Dienstversion (1.0 oder 2.0) vorhanden sein kann.
Für andere Modi:
Abbildung 4: Akkuzustand in Android 9, Aufladen im Aus-Modus und Wiederherstellungsmodus
Google Fit in Android 11
In Android 11 funktioniert die Dienstqualitätskomponente wie im folgenden Diagramm dargestellt:
[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) ] |
+-------------------------------------+
Wenn die Health 2.1-Implementierung nicht vorhanden ist, greift das System auf den Legacy-Codepfad zurück, wie in den vorherigen Abschnitten beschrieben.
Für andere Modi:
[ 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) ] |
+-------------------------------------+
Im folgenden vereinfachten Diagramm sind die verschiedenen Modi dargestellt:
Abbildung 5: Health HAL 2.1-Infrastruktur
Google Fit in Android 13
In Android 13 wird die Health AIDL HAL eingeführt. Die Funktionsweise der Gesundheitskomponente ist im folgenden Diagramm dargestellt:
Abbildung 6 Health AIDL HAL-Infrastruktur
HIDL HAL-Schnittstelle 2.0
Der Health@2.0-HAL bietet dem Framework die gleichen Funktionen wie der alte fehlerfreie Daemon. Außerdem bietet es ähnliche APIs wie IBatteryPropertiesRegistrar, die zuvor als Binder-Dienst bereitgestellt wurden.
Die Hauptoberfläche, IHealth, bietet die folgenden Funktionen:
registerCallback
, umIBatteryPropertiesRegistrar.registerListener
zu ersetzenunregisterCallback
, umIBatteryPropertiesRegistrar.unregisterListener
zu ersetzenupdate
, umIBatteryPropertiesRegistrar.scheduleUpdate
zu ersetzenIBatteryPropertiesRegistrar.getProperties
durch Folgendes ersetzt:getChargeCounter
getCurrentNow
getCurrentAverage
getCapacity
getEnergyCounter
getChargeStatus
getHealthInfo
Darüber hinaus bietet IHealth
die folgenden neuen APIs für storaged
, um anbieterspezifische speicherbezogene Informationen abzurufen:
getStorageInfo
getDiskStats
Über Callbacks und getHealthInfo
wird ein neuer Datentyp, @2.0::HealthInfo
, zurückgegeben.
Diese Struktur enthält alle Informationen zum Gerätezustand, die über health@2.0 HAL verfügbar sind, darunter:
- Ladeinformationen (AC/USB/kabellos, Strom, Spannung usw.)
- Akkuinformationen (Vorhandensein, Akkustand, Strom, Spannung, Ladung, Technologie usw.)
- Speicherinformationen (Speichergeräteinformationen, Laufwerksstatistiken)
Informationen zur Implementierung des Health-Dienstes 2.0 finden Sie unter Health 2.0 implementieren.
HIDL HAL-Schnittstelle 2.1
Die HAL von health@2.1 unterstützt das Aufladen im Aus-Modus und liefert mehr Informationen zum Akku.
Die Hauptschnittstelle IHealth bietet die folgenden zusätzlichen Funktionen
getHealthConfig
: zum Abrufen der Konfiguration dieses HALgetHealthInfo_2_1
: ein Upgrade auf die NebenversiongetHealthInfo
shouldKeepScreenOn
: Ob das Display im Lademodus eingeschaltet bleiben soll
Außerdem muss @2.1::IHealth
implementiert werden, damit @2.1::IHealthInfoCallback
die übergeordneten Funktionen registerCallback
und unregisterCallback
unterstützen kann. Die neue Callback-Schnittstelle gibt mit der healthInfoChanged_2_1
-Funktion anstelle der übernommenen healthInfoChanged
-Funktion Informationen zum Gesundheitszustand an den Client zurück.
Über Callbacks und getHealthInfo_2_1
wird ein neuer Datentyp @2.1::HealthInfo
zurückgegeben. Diese Struktur enthält zusätzliche Informationen zum Gerätezustand, die über health@2.0 HAL verfügbar sind, darunter:
- Akkukapazität
- Akkuladezeit bis zum vollen Akku (in Sekunden)
- Nennkapazität des Akkus bei voller Ladung (in μAh)
Im folgenden UML-Diagramm sind die Klassen zu sehen, die für die Implementierung der HAL für Gesundheit nützlich sind:
Abbildung 7: UML-Diagramm für Health HAL 2.1
Informationen zur Implementierung des Diensts „Systemstatus 2.1“ finden Sie unter Systemstatus 2.1 implementieren.
AIDL HAL-Schnittstelle Version 1
API-Änderungen
Die HAL von AIDL Version 1 unterstützt ähnliche APIs wie die HAL von HIDL 2.1. Im Vergleich zur HIDL 2.1-Schnittstelle wurden in der API folgende Änderungen vorgenommen:
- Ladegerätebezogene APIs, die in HIDL HAL 2.1 eingeführt wurden, werden nicht in die AIDL HAL portiert. Da die Funktion für das Aufladen im alternativen Modus nur auf der Partition
/vendor
verfügbar ist, sind keine APIs auf der Anbieterschnittstelle erforderlich. Weitere Informationen zum korrekten Laden im Aus-Modus finden Sie unten unter Ladegerät. - Der Typ
StorageAttribute
und zugehörige Felder werden entfernt, da sie nicht verwendet werden. chargerDockOnline
wirdHealthInfo
hinzugefügt, um das Laden im Dock zu unterstützen.
Implementierung
Im folgenden UML-Diagramm sind die Klassen zu sehen, die für die Implementierung der HAL für Gesundheit nützlich sind:
Abbildung 8. Health AIDL HAL UML-Diagramm.
Informationen zur Implementierung des Health-AIDL-Dienstes finden Sie unter Implementing Health AIDL HAL (Health-AIDL-HAL implementieren).
Wiederherstellung
Android 13 unterstützt Binder im Wiederherstellungsmodus. Wenn Sie den Health-AIDL-Dienst in der Wiederherstellung installieren, kann er im Wiederherstellungsmodus ausgeführt werden.
Informationen zum Installieren des Health-AIDL-Dienstes in der Wiederherstellung finden Sie unter den folgenden Links:
Ladegerät
Die Funktion für das Laden im Offlinemodus wurde von /system
auf /vendor
verschoben. Wenn Geräte, die mit Android 13 auf den Markt kommen, das Aufladen im ausgeschalteten Zustand unterstützen, muss die HAL-Dienst-Binärdatei den Lademodus unterstützen. Weitere Informationen finden Sie unter Ladegerät implementieren.
Eigenschaften des Ladegerätsystems
Die Properties ro.charger.*
können nicht mehr vom charger
-Binärcode in /vendor
gelesen werden. Wenn auf Ihrem Gerät eine der ro.charger.*
-Systemeigenschaften festgelegt ist, lesen Sie den Hilfeartikel Systemeigenschaften für Ladegeräte.