Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

Android Gesundheit

Android 9 enthält android.hardware.health HAL 2.0, ein Hauptversions-Upgrade von health@1.0 HAL. Diese neue HAL hat folgende Vorteile:

  • Sauberere Trennung zwischen Framework- und Vendor-Code.
  • Veraltet den unnötigen healthd Daemon.
  • Größere Freiheitsgrade für die Anpassung von Anbietern in Gesundheitsinformationsberichten.
  • Mehr Informationen zum Gerätezustand als nur Batterie.

Android 11 enthält android.hardware.health HAL 2.1, ein kleines Versions-Upgrade von health@2.0 HAL. Diese neue HAL hat folgende Vorteile:

  • Einfacher zu implementieren
  • Bessere Konformität mit vorhandenen 2.0 HAL-APIs
  • Bessere Höhentrennung im Off-Mode-Ladecode
  • Bessere Unterstützung für das Framework zur Anzeige des Batteriezustands des Geräts

Bedarf

Geräte, die mit Android 9 gestartet werden, müssen die 2.0 HAL bereitstellen (und dürfen die 1.0 HAL nicht bereitstellen). Geräte, die nicht mit Android 9 gestartet werden, aber planen, das Herstellerimage auf Target Framework Compatibility Matrix Version 3 (veröffentlicht in Android 9) zu aktualisieren, müssen vorhandene 1.0 HAL-Implementierungen entfernen und die 2.0 HAL bereitstellen.

Geräte, die mit Android 11 gestartet werden, müssen die 2.1 HAL bereitstellen (und dürfen nicht die 1.0 oder 2.0 HAL bereitstellen). Geräte, die nicht mit Android 11 gestartet werden, aber planen, das Herstellerimage auf Target Framework Compatibility Matrix Version 5 (veröffentlicht in Android 11) zu aktualisieren, müssen vorhandene 2.0 HAL-Implementierungen entfernen und die 2.1 HAL bereitstellen. Geräte, die nicht mit Android 11 gestartet werden und nicht planen, das Hersteller-Image zu aktualisieren, werden ebenfalls empfohlen, um die 2.1 HAL bereitzustellen.

AOSP enthält mehrere Hilfsbibliotheken, mit denen Sie die 2.1-HAL und den Übergang von der alten 1.0-HAL implementieren können.

Terminologie

  • health@1.0 : Abkürzung für android.hardware.health@1.0 . Bezieht sich auf die Gesundheit HIDL HAL Version 1.0 in Android 8.0 veröffentlicht.
  • health@2.0 : Abkürzung für android.hardware.health@2.0 . Bezieht sich auf die Gesundheit HIDL HAL Version 2.0 in Android 9 veröffentlicht.
  • health@2.1 : Abkürzung für android.hardware.health@2.1 . Bezieht sich auf die Gesundheit HIDL HAL Version 2.1 in Android 11 veröffentlicht.
  • Ladegerät : Ausführbare Datei, die im Off-Mode-Modus ausgeführt wird und die Animation zum Aufladen des Telefons anzeigt.
  • Wiederherstellung : Die ausführbare Datei wird im Wiederherstellungsmodus ausgeführt und muss Batterieinformationen abrufen.
  • healthd : Legacy-Daemon, der in Android ausgeführt wird und gesundheitsbezogene Informationen abruft und dem Framework zur Verfügung stellt.
  • gespeichert : Daemon läuft unter Android und ruft Speicherinformationen ab und stellt sie dem Framework zur Verfügung.

Gesundheit in Android 8.x.

In Android 8.x funktioniert die Integritätskomponente wie in der folgenden Abbildung dargestellt:

Gesundheit in Android 8.x.

Abbildung 1 . Gesundheit in Android 8.x.

In diesem Diagramm:

  • Ein (1) Binder-Aufruf und ein (1) Hwbinder-Aufruf werden vom Framework zur Kommunikation mit Hardware verwendet.
  • healthd verknüpft statisch mit libhealthd_android , libbatterymonitor und libbatteryservice .
  • health@1.0-impl verlinkt statisch auf libhealthd. BOARD .

Jedes Board kann eine andere libhealthd. BOARD ; Zum Zeitpunkt der Erstellung wird festgelegt, zu welchem ​​Ladegerät, Health@1.0-impl und Wiederherstellungslink.

Für andere Modi:

Lade- und Wiederherstellungsmodus außerhalb des Modus in Android 8.x.

Abbildung 2. Zustand in Android 8.x, Lade- und Wiederherstellungsmodus außerhalb des Modus

  • Ladegerät verknüpft statisch mit libhealthd. BOARD , libhealthd_charger und libbatterymonitor .
  • Die Wiederherstellung ist statisch mit libhealthd. BOARD verknüpft libhealthd. BOARD und libbatterymonitor .

Gesundheit in Android 9

In Android 9 funktioniert die Gesundheitskomponente wie in der folgenden Abbildung dargestellt: Gesundheit in Android 9

Abbildung 3 . Gesundheit in Android 9

Das Framework versucht, den Dienst hwservicemanager vom hwservicemanager . Wenn dies fehlschlägt, ruft es health@1.0 auf (in Android 8.x). Der Legacy-Codepfad wird beibehalten, sodass das Android 9-Systemabbild mit dem Android 8.x-Herstellerabbild kompatibel ist. Das Framework ruft keine Informationen von beiden HALs ab, da nur eine Dienstversion (1.0 oder 2.0) auf dem Gerät vorhanden sein kann.

Für andere Modi:

Off-Mode-Aufladung und Wiederherstellung in Android 9

Abbildung 4. Zustand in Android 9, Lade- und Wiederherstellungsmodus außerhalb des Modus

Gesundheit in Android 11

In Android 11 funktioniert die Gesundheitskomponente wie in der folgenden Abbildung 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 Implementierung von Health 2.1 nicht vorhanden ist, greift das System auf den in den vorherigen Abschnitten beschriebenen Legacy-Codepfad zurück

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)      ] |
+-------------------------------------+

HAL-Schnittstelle 2.0

Der Health@2.0 HAL bietet dem Framework die gleiche Funktionalität wie der alte HealthD-Daemon. Es bietet auch APIs, die denen ähneln, die zuvor als Binder-Service (dh IBatteryPropertiesRegistrar ) bereitgestellt wurden .

Die Hauptschnittstelle IHealth bietet die folgenden Funktionen:

  • registerCallback , um IBatteryPropertiesRegistrar.registerListener zu ersetzen
  • unregisterCallback , um IBatteryPropertiesRegistrar.unregisterListener zu ersetzen
  • update , um IBatteryPropertiesRegistrar.scheduleUpdate zu ersetzen
  • IBatteryPropertiesRegistrar.getProperties werden durch Folgendes ersetzt:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Darüber hinaus bietet IHealth die folgenden neuen APIs zum storaged , um herstellerspezifische speicherbezogene Informationen abzurufen:

  • getStorageInfo
  • getDiskStats

Eine neue Struktur, @2.0::HealthInfo , wird über Rückrufe und getHealthInfo . Diese Struktur enthält alle Informationen zum Gerätezustand, die über health@2.0 HAL verfügbar sind, einschließlich:

  • Ladeinformationen (AC / USB / Wireless, Strom, Spannung usw.)
  • Batterieinformationen (Vorhandensein, Batteriestand, Strom, Spannung, Ladung, Technologie usw.)
  • Speicherinformationen (Speichergeräteinformationen, Festplattenstatistiken)

HAL-Schnittstelle 2.1

Der health@2.1 HAL unterstützt das Laden außerhalb des Modus und bietet weitere Informationen zum Akku.

Die Hauptschnittstelle IHealth bietet die folgenden zusätzlichen Funktionen

  • getHealthConfig : Zum Abrufen der Konfiguration dieser HAL
  • getHealthInfo_2_1 : Ein kleines Versions-Upgrade auf getHealthInfo
  • shouldKeepScreenOn : Bestimmt, ob der Bildschirm im shouldKeepScreenOn soll

Darüber hinaus ist die Implementierung von @2.1::IHealth erforderlich, um @2.1::IHealthInfoCallback für die geerbten Funktionen registerCallback und unregisterCallback . Die neue Rückrufschnittstelle gibt mithilfe der Funktion healthInfoChanged_2_1 anstelle der geerbten Funktion healthInfoChanged Informationen zum healthInfoChanged_2_1 an den Client zurück.

Eine neue Struktur, @2.1::HealthInfo , wird über Rückrufe und getHealthInfo_2_1 . Diese Struktur enthält zusätzliche Informationen zum Gerätezustand, die über health@2.0 HAL verfügbar sind, einschließlich:

  • Batteriekapazität
  • Die Ladezeit des Akkus ist jetzt voll (in Sekunden).
  • Auslegungskapazität für volle Ladung des Akkus (in μAh)

Informationen zum Implementieren des Gesundheitsdienstes finden Sie unter Implementieren des Gesundheitszustands .