Android 13 enthält die android.hardware.health
-AIDL-HAL, eine Konvertierung der health@2.1-HAL. Dieses neue HAL bietet folgende Vorteile:
- Nicht verwendete APIs für Ladegeräte entfernen
- Nicht verwendete
StorageAttribute
- und zugehörige Felder entfernen - Unterstützung des Ladens über das Dock.
Android 11 enthält android.hardware.health
HAL 2.1, ein geringfügiges Versions-Upgrade von health@2.0 HAL. Dieses neue HAL bietet folgende Vorteile:
- Bessere Trennung zwischen Framework und Anbietercode.
- Größere Freiheit für die Anpassung von Berichten zu Gesundheitsinformationen durch Anbieter.
- Mehr Informationen zum Gerätezustand als nur zum Akku.
Die Dokumentation zur Implementierung des Health 2.1-HAL finden Sie auf dieser Seite als Referenz.
Voraussetzungen
Dieser Abschnitt enthält Anforderungen für Android 11, 12 und 13 oder höher.
Geräte mit Android 11 und Android 12
Geräte, die bei Markteinführung Android 11 und 12 nutzen, müssen die 2.1‑HAL oder die AIDL‑HAL bereitstellen. Geräte, die nicht mit Android 11 oder 12 auf den Markt kommen, aber das Anbieterimage auf die Target Framework Compatibility Matrix Version 5 (in Android 11 veröffentlicht) oder Version 6 (in Android 12 veröffentlicht) aktualisieren möchten, müssen vorhandene 2.0-HAL-Implementierungen entfernen und die 2.1-HAL oder die AIDL-HAL bereitstellen. Für Geräte, die nicht mit Android 11 auf den Markt kommen und für die kein Update des Anbieter-Images geplant ist, wird ebenfalls empfohlen, die HAL 2.1 oder AIDL bereitzustellen.
AOSP enthält mehrere Hilfsbibliotheken, die Ihnen bei der Implementierung des 2.1-HAL und der Umstellung von den alten HIDL-HALs helfen.
Geräte mit Android 13 und höher
Geräte, die mit Android 13 auf den Markt kommen, müssen den AIDL-HAL bereitstellen (und dürfen keinen HIDL-HAL bereitstellen). Geräte, die nicht mit Android 13 auf den Markt kommen, aber das Anbieter-Image auf die Target Framework Compatibility Matrix Version 7 (in Android 13 veröffentlicht) aktualisieren möchten, müssen vorhandene HIDL-HAL-Implementierungen entfernen und die AIDL-HAL bereitstellen. Auch für Geräte, die nicht mit Android 13 auf den Markt kommen und für die kein Update des Anbieter-Images geplant ist, wird empfohlen, den AIDL-HAL bereitzustellen.
AOSP enthält mehrere Hilfsbibliotheken, die Ihnen bei der Implementierung des AIDL-HAL und der Umstellung von den alten HIDL-HALs helfen.
Terminologie
Im Folgenden finden Sie Begriffe, die Sie kennen sollten, bevor Sie die restliche Dokumentation zur Systemintegrität von Android lesen:
- health@2.1
- Abkürzung von
android.hardware.health@2.1
. Version 1 des Health-HIDL wurde in Android 11 veröffentlicht. - Gesundheits-AIDL-HAL
- Abkürzung von
android.hardware.health
. Version 1 des Health AIDL HAL wurde in Android 13 veröffentlicht. - Ladegerät
- Ausführbare Datei, die während des Aufladens im Off-Modus ausgeführt wird und die Animation für das Aufladen des Smartphones anzeigt.
- Wiederherstellung
- Ausführbare Datei, die im Wiederherstellungsmodus ausgeführt wird und Akkuinformationen abrufen muss.
- storaged
- Daemon, der Speicherinformationen abruft und dem Framework zur Verfügung stellt.
Gesundheit in Android 11 und 12
Unter Android 11 und 12 funktioniert die Gesundheitskomponente wie im folgenden Diagramm beschrieben:
[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) ] |
+-------------------------------------+
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) ] |
+-------------------------------------+
Das folgende vereinfachte Diagramm zeigt die verschiedenen Modi:
Abbildung 1: Health HIDL HAL 2.1-Infrastruktur.
Gesundheit in Android 13
In Android 13 wird die Health AIDL HAL eingeführt. Abbildung 2 zeigt, wie die Gesundheitskomponente funktioniert:
Abbildung 2: Health AIDL HAL-Infrastruktur
HIDL-HAL-Schnittstelle 2.1
Das Health 2.1-HAL unterstützt das Laden im Aus-Modus und liefert weitere 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
: Gibt an, ob das Display im Lademodus eingeschaltet bleiben soll.
Außerdem ist die Implementierung von @2.1::IHealth
erforderlich, um @2.1::IHealthInfoCallback
für die geerbten Funktionen registerCallback
und unregisterCallback
zu unterstützen. Die neue Callback-Schnittstelle gibt Informationen zum Leistungsstatus über die Funktion healthInfoChanged_2_1
an den Client zurück, anstatt die geerbte Funktion healthInfoChanged
zu verwenden.
Eine neue Struktur, @2.1::HealthInfo
, wird über Callbacks und getHealthInfo_2_1
zurückgegeben. Diese Struktur enthält zusätzliche Informationen zum Gerätestatus, die über health@2.0 HAL verfügbar sind, darunter:
- Akkukapazität
- Akkuladezeit bis zum vollständigen Aufladen (in Sekunden)
- Akkukapazität bei vollem Akku (in μAh)
Abbildung 3 zeigt ein UML-Diagramm der Klassen, die für die Implementierung des Health-HAL nützlich sind:
Abbildung 3: UML-Diagramm für Health HAL 2.1
Informationen zur Implementierung von Health 2.1 finden Sie unter Health 2.1 implementieren.
AIDL-HAL-Schnittstelle, Version 1
Dieser Abschnitt enthält Informationen zu AIDL HAL-Schnittstelle Version 1.
API-Änderungen
Das AIDL-HAL Version 1 unterstützt ähnliche APIs wie das HIDL-HAL 2.1. Im Vergleich zur HIDL 2.1-Schnittstelle wurden in der API folgende Änderungen vorgenommen:
- Die in HIDL HAL 2.1 eingeführten APIs für Ladegeräte werden nicht in die AIDL-HAL portiert. Da die Funktion zum Laden im Off-Modus nur auf der Partition
/vendor
verfügbar ist, sind keine APIs auf der Anbieterschnittstelle erforderlich. Informationen zur korrekten Implementierung des Ladens im Aus-Zustand finden Sie unter charger. - Der Typ
StorageAttribute
und zugehörige Felder werden entfernt, da sie nicht verwendet werden. chargerDockOnline
wurdeHealthInfo
hinzugefügt, um das Laden im Dock zu unterstützen.
Implementierung
Abbildung 4 zeigt ein UML-Diagramm der Klassen, die für die Implementierung des Health AIDL HAL nützlich sind:
Abbildung 4: UML-Diagramm der Health AIDL HAL.
Informationen zur Implementierung des Health AIDL-Dienstes finden Sie unter Health AIDL HAL implementieren.
Recovery
Android 13 unterstützt Binder in der Wiederherstellung. Durch die Installation des Health AIDL-Dienstes für die Wiederherstellung kann er im Wiederherstellungsmodus ausgeführt werden.
Informationen zur Installation des AIDL-Dienstes für die Systemdiagnose in der Wiederherstellungspartition finden Sie in den folgenden Abschnitten:
Ladegerät
Die Funktion „Laden im Aus-Zustand“ wird von /system
nach /vendor
verschoben. Wenn Geräte, die mit Android 13 auf den Markt kommen, das Laden im Aus-Modus unterstützen, muss die HAL-Dienst-Binärdatei den Lademodus unterstützen. Eine Anleitung dazu finden Sie unter Ladegerät implementieren.
Systemattribute des Ladegeräts
Die Properties ro.charger.*
können nicht mehr vom Binärprogramm charger
in /vendor
gelesen werden. Wenn auf Ihrem Gerät eine der ro.charger.*
-Systemeigenschaften festgelegt ist, lesen Sie den Abschnitt Systemeigenschaften für Ladegeräte.