Android-Gesundheit

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

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

Android 11 enthält android.hardware.health HAL 2.1, eine kleinere Version Upgrade von health@2.0 HAL. Diese neue HAL hat folgende Vorteile:

  • Einfacher zu implementieren
  • Bessere Konformität mit bestehenden 2.0 HAL APIs
  • Bessere Höhentrennung im Off-Mode-Ladecode
  • Bessere Unterstützung für das Framework, um den Batteriezustand des Geräts anzuzeigen

Anforderungen

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 Anbieterimage auf Target Framework Compatibility Matrix Version 3 (veröffentlicht in Android 9) zu aktualisieren, müssen vorhandene 1.0 HAL-Implementierungen entfernen und 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 Anbieterimage auf die 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. Für Geräte, die nicht mit Android 11 starten und nicht planen, das Herstellerimage zu aktualisieren, wird ebenfalls empfohlen, die 2.1 HAL bereitzustellen.

AOSP enthält mehrere Hilfsbibliotheken, die Ihnen bei der Implementierung von 2.1 HAL und dem Übergang von der alten 1.0 HAL helfen.

Terminologie

  • health@1.0: Abkürzung von android.hardware.health@1.0 . Bezieht sich auf Gesundheit HIDL HAL Version 1.0, die in Android 8.0 veröffentlicht wurde.
  • health@2.0: Abkürzung von android.hardware.health@2.0 . Bezieht sich auf Gesundheit HIDL HAL Version 2.0, die in Android 9 veröffentlicht wurde.
  • health@2.1: Abkürzung von android.hardware.health@2.1 . Bezieht sich auf Gesundheit HIDL HAL Version 2.1, die in Android 11 veröffentlicht wurde.
  • Ladegerät: ausführbare Datei läuft im Off-Modus , dass zeigt die Telefon-Lade - Animation laden.
  • Erholung: ausführbarer Lauf im Recovery - Modus, die Batterieinformationen abrufen muss.
  • healthd: Legacy - Daemon läuft in Android , dass abruft gesundheitsbezogene Informationen und stellt es Rahmen.
  • storaged: Daemon , dass abruft Speicherinformationen in Android läuft und stellt es Rahmen.

Gesundheit in Android 8.x

In Android 8.x funktioniert die Integritätskomponente wie im folgenden Diagramm beschrieben:

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 verwendet, um mit der Hardware zu kommunizieren.
  • healthd verbindet statisch libhealthd_android , libbatterymonitor und libbatteryservice .
  • health@1.0-impl verbindet statisch libhealthd. BOARD .

Jede Karte kann eine andere anpassen libhealthd. BOARD ; Es wird zur Build-Zeit bestimmt, mit welchem ​​Ladegerät, health@1.0-impl und Recovery-Link.

Für andere Modi:

Lade- und Wiederherstellungsmodus im Off-Modus in Android 8.x

Abbildung 2. Gesundheit in Android 8.x, off-Modus Laden und Wiederherstellungsmodus

  • Ladegerät verbindet statisch libhealthd. BOARD , libhealthd_charger und libbatterymonitor .
  • Erholung verbindet statisch libhealthd. BOARD und libbatterymonitor .

Gesundheit in Android 9

In Android 9 funktioniert die Gesundheitskomponente wie im folgenden Diagramm beschrieben: Gesundheit in Android 9

Abbildung 3. Gesundheit in Android 9

Der Rahmen Versuchte health@2.0 Service von abrufen hwservicemanager . Wenn dies fehlschlägt, wird health@1.0 (in Android 8.x) aufgerufen. Der Legacy-Codepfad wird beibehalten, damit das Android 9-Systemimage mit dem Android 8.x-Anbieterimage 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:

Laden und Wiederherstellen im Off-Modus in Android 9

Abbildung 4. Gesundheit in Android 9, off-Modus Laden und Wiederherstellungsmodus

Gesundheit in Android 11

In Android 11 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)      ] |
+-------------------------------------+

Wenn die Integritäts-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)      ] |
+-------------------------------------+

HAL-Schnittstelle 2.0

Die health@2.0 HAL bietet dem Framework die gleiche Funktionalität wie der alte healthd-Daemon. Es bietet auch APIs, die ähnlich sind , was healthd zuvor als Bindemittel Dienst (dh IBatteryPropertiesRegistrar ).

Die wichtigste Schnittstelle, ihealth , bietet die folgenden Funktionen:

  • registerCallback , ersetzen IBatteryPropertiesRegistrar.registerListener
  • unregisterCallback , ersetzen IBatteryPropertiesRegistrar.unregisterListener
  • update , ersetzen IBatteryPropertiesRegistrar.scheduleUpdate
  • IBatteryPropertiesRegistrar.getProperties werden durch folgende Fassung:
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

Darüber hinaus IHealth bietet folgende neue APIs für storaged herstellerspezifischen speicherbezogenen Informationen abrufen:

  • getStorageInfo
  • getDiskStats

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

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

HAL-Schnittstelle 2.1

Der health@2.1 HAL unterstützt das Laden im Off-Modus und bietet weitere Informationen zum Akku.

Die wichtigste Schnittstelle, ihealth , bietet die folgenden zusätzlichen Funktionen

  • getHealthConfig : die Konfiguration dieses HAL abrufen
  • getHealthInfo_2_1 : eine kleinere Version Upgrade auf getHealthInfo
  • shouldKeepScreenOn : zu bestimmen , ob der Bildschirm im Lademodus gehalten sollte

Darüber hinaus ist die Implementierung von @2.1::IHealth ist erforderlich , um Unterstützung @2.1::IHealthInfoCallback für seine ererbten registerCallback und unregisterCallback Funktionen. Die neuen Callback - Schnittstelle kehrt Gesundheit Gesundheitsinformationen an den Client seiner Verwendung healthInfoChanged_2_1 Funktion anstelle der geerbten healthInfoChanged Funktion.

Eine neue Struktur, @2.1::HealthInfo , wird über Rückrufe und zurück 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ätsstufe
  • Akkuladezeit jetzt voll (in Sekunden)
  • Designkapazität der Batterie bei voller Ladung (in μAh)

Für Informationen über den Gesundheitsdienst der Umsetzung finden Implementieren von Gesundheit .