Androidの健康

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Android 9 には、health@1.0 HAL からのメジャー バージョン アップグレードであるandroid.hardware.health HAL 2.0 が含まれています。この新しい HAL には次の利点があります。

  • フレームワークとベンダー コードの分離がより明確になりました。
  • 不要なhealthdデーモンを非推奨にします。
  • 健康情報レポートでのベンダーのカスタマイズの自由度が向上します。
  • バッテリーだけでなく、より多くのデバイスのヘルス情報。

Android 11 には、health@2.0 HAL からのマイナー バージョン アップグレードであるandroid.hardware.health HAL 2.1 が含まれています。この新しい HAL には次の利点があります。

  • 実装が容易
  • 既存の 2.0 HAL API との適合性の向上
  • オフモード充電コードでの高音分離の改善
  • デバイスのバッテリーの状態を示すためのフレームワークのサポートの向上

Android 13 には、health@2.1 HAL からの変換であるandroid.hardware.health AIDL HAL が含まれています。この新しい HAL には次の利点があります。

  • 使用されていない充電器関連の API を削除する
  • 未使用のStorageAttributeおよび関連フィールドを削除する
  • ドック充電をサポートします。

要件

Android 9 および Android 10 を実行しているデバイス

Android 9 で起動するデバイスは、2.x HAL を提供する必要があります (1.0 HAL を提供してはなりません) または AIDL HAL を提供する必要があります。 Android 9 で起動しないが、ベンダー イメージを Target Framework Compatibility Matrix バージョン 3 (Android 9 でリリース) に更新することを計画しているデバイスは、既存の 1.0 HAL 実装を削除し、2.x HAL または AIDL HAL を提供する必要があります。

AOSP には、2.0 HAL の実装と古い 1.0 HAL からの移行を支援するために設計された複数のヘルパー ライブラリが含まれています。

Android 11 および Android 12 を実行しているデバイス

Android 11 で起動するデバイスは、2.1 HAL を提供する必要があります (1.0 または 2.0 HAL を提供してはなりません) または AIDL HAL を提供する必要があります。 Android 11 で起動しないが、ベンダー イメージを Target Framework Compatibility Matrix バージョン 5 (Android 11 でリリース) に更新することを計画しているデバイスは、既存の 2.0 HAL 実装を削除し、2.1 HAL または AIDL HAL を提供する必要があります。 Android 11 で起動せず、ベンダー イメージを更新する予定がないデバイスも、2.1 HAL を提供することをお勧めします。

AOSP には、2.1 HAL の実装と古い 1.0 HAL からの移行を支援するために設計された複数のヘルパー ライブラリが含まれています。

Android 13 以降を実行しているデバイス

Android 13 で起動するデバイスは、AIDL HAL を提供する必要があります (HIDL HAL を提供してはなりません)。 Android 13 で起動しないが、ベンダー イメージを Target Framework Compatibility Matrix バージョン 7 (Android 13 でリリース) に更新することを計画しているデバイスは、既存の HIDL HAL 実装を削除し、AIDL HAL を提供する必要があります。 Android 13 で起動せず、ベンダー イメージを更新する予定がないデバイスも、AIDL HAL を提供することをお勧めします。

デバイスは HIDL 1.0 HAL を提供してはなりません。

AOSP には、AIDL HAL の実装と古い HIDL HAL からの移行を支援するために設計された複数のヘルパー ライブラリが含まれています。

用語

  • health@1.0 : android.hardware.health@1.0の略。 Android 8.0 でリリースされたヘルス HIDL HAL バージョン 1.0 を指します。
  • health@2.0 : android.hardware.health@2.0の略。 Android 9 でリリースされたヘルス HIDL HAL バージョン 2.0 を指します。
  • health@2.1 : android.hardware.health@2.1の略。 Android 11 でリリースされたヘルス HIDL HAL バージョン 2.1 を指します。
  • health AIDL HAL : android.hardware.healthの略。
    • バージョン 1 は Android 13 でリリースされました。
  • Charger : 電話の充電アニメーションを表示する、オフモードの充電で実行される実行可能ファイル。
  • recovery : バッテリ情報を取得する必要がある回復モードで実行されている実行可能ファイル。
  • healthd : 健康関連の情報を取得してフレームワークに提供する、Android で実行されるレガシー デーモン。
  • storaged : Android で実行され、ストレージ情報を取得してフレームワークに提供するデーモン。

Android 8.x のヘルス

Android 8.x では、ヘルス コンポーネントは次の図に示すように機能します。

Android 8.x のヘルス

図 1 . Android 8.x のヘルス

この図では:

  • 1 つのバインダー呼び出しと 1 つの hwbinder 呼び出しが、フレームワークによってハードウェアと通信するために使用されます。
  • healthdは、 libhealthd_androidlibbatterymonitor 、およびlibbatteryserviceに静的にリンクします。
  • health@1.0-impl は libhealthd に静的にリンクしlibhealthd. BOARD

各ボードは異なるlibhealthd. BOARD ;ビルド時に、charger、health@1.0-impl、recovery のリンク先が決定されます。

他のモードの場合:

Android 8.x のオフモード充電およびリカバリ モード

図 2. Android 8.x のヘルス、オフモードの充電と回復モード

  • Charger はlibhealthd. BOARDlibhealthd_chargerおよびlibbatterymonitor
  • recovery はlibhealthd. BOARDlibbatterymonitor

Android 9 のヘルス

Android 9 では、ヘルス コンポーネントは次の図に示すように機能します。 Android 9 のヘルス

図3 。 Android 9 のヘルス

フレームワークは、 hwservicemanager からhwservicemanagerサービスを取得しようとします。失敗した場合は、health@1.0 (Android 8.x の場合) を呼び出します。 Android 9 システム イメージが Android 8.x ベンダー イメージと互換性を持つように、従来のコード パスが保持されます。デバイスには 1 つのサービス バージョン (1.0 または 2.0) しか存在できないため、フレームワークは両方の HAL から情報を取得しません。

他のモードの場合:

Android 9 でのオフモード充電と回復

図 4. Android 9 のヘルス、オフモードの充電と回復モード

Android 11 の健康

Android 11 では、ヘルス コンポーネントは次の図に示すように機能します。

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

Health 2.1 の実装が存在しない場合、前のセクションで説明したように、システムはレガシ コード パスにフォールバックします。

他のモードの場合:

[       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 2.1 インフラストラクチャ

図 5. Health HAL 2.1 インフラストラクチャ

Android 13 のヘルス

Android 13 では、Health AIDL HAL が導入されました。正常性コンポーネントは、次の図で詳しく説明されているように機能します。

Health AIDL HAL インフラストラクチャ

図 6. Health AIDL HAL インフラストラクチャ

HIDL HAL インターフェース 2.0

health@2.0 HAL は、古い healthd デーモンと同じ機能をフレームワークに提供します。また、healthd が以前にバインダー サービスとして提供していたものと同様の API も提供します (つまりIBatteryPropertiesRegistrar )。

メイン インターフェイスIHealthは、次の機能を提供します。

  • registerCallbackIBatteryPropertiesRegistrar.registerListenerを置き換える
  • unregisterCallbackIBatteryPropertiesRegistrar.unregisterListenerを置き換える
  • updateIBatteryPropertiesRegistrar.scheduleUpdateを置き換える
  • IBatteryPropertiesRegistrar.getPropertiesは次のものに置き換えられます。
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

さらに、 IHealthは、 storagedがベンダー固有のストレージ関連情報を取得するための次の新しい API を提供します。

  • getStorageInfo
  • getDiskStats

新しい構造体@2.0::HealthInfoは、コールバックとgetHealthInfoを介して返されます。この構造体には、health@2.0 HAL を通じて利用可能なすべてのデバイスの正常性情報が含まれています。

  • 充電情報(AC/USB/ワイヤレス、電流、電圧など)
  • バッテリー情報(存在、バッテリーレベル、電流、電圧、充電、テクノロジーなど)
  • ストレージ情報 (ストレージ デバイス情報、ディスク統計)

Health Service 2.0 の実装については、「 Implementing Health 2.0 」を参照してください。

HIDL HAL インターフェース 2.1

health@2.1 HAL はオフモード充電をサポートし、バッテリーに関する詳細情報を提供します。

メイン インターフェイスIHealthは、次の追加機能を提供します。

  • getHealthConfig : この HAL の構成を取得します
  • getHealthInfo_2_1 : getHealthInfoのマイナー バージョン アップグレード
  • shouldKeepScreenOn : 充電器モードで画面をオンにしておくかどうかを決定する

さらに、 @2.1::IHealth 2.1::IHealth の実装では、継承されたregisterCallbackおよびunregisterCallback関数に対して@2.1::IHealthInfoCallbackをサポートする必要があります。新しいコールバック インターフェイスは、継承されたhealthInfoChanged関数の代わりにhealthInfoChanged_2_1関数を使用して、クライアントに健康状態情報を返します。

新しい構造体@2.1::HealthInfoは、コールバックとgetHealthInfo_2_1を介して返されます。この構造体には、health@2.0 HAL を通じて利用できる追加のデバイス ヘルス情報が含まれています。

  • バッテリー容量レベル
  • バッテリーが完全に充電されるまでの時間 (秒)
  • バッテリーのフル充電設計容量 (μAh)

Health HAL の実装に役立つクラスについては、次の UML 図を参照してください。

Health 2.1 HAL UML ダイアグラム

図 7. Health HAL 2.1 UML ダイアグラム

Health サービス 2.1 の実装については、「 Implementing Health 2.1 」を参照してください。

AIDL HAL インターフェース バージョン 1

API の変更

AIDL バージョン 1 HAL は、HIDL 2.1 HAL と同様の API をサポートしています。 HIDL 2.1 インターフェースと比較して、API では次の点が変更されています。

  • HIDL HAL 2.1 で導入された充電器関連の API は、AIDL HAL に移植されていません。オフモード充電の機能は/vendorパーティションにのみ存在するため、Vendor インターフェイスの API は必要ありません。オフモード充電を適切に実装するには、以下の充電器を参照してください。
  • Type StorageAttributeおよび関連するフィールドは、使用されていないため削除されます。
  • ドック充電をサポートするために、 HealthInfochargerDockOnlineに追加されました。

実装

Health HAL の実装に役立つクラスについては、次の UML 図を参照してください。

Health AIDL HAL UML ダイアグラム

図 8. Health AIDL HAL UML ダイアグラム

Health AIDL サービスの実装については、「 Implementing Health AIDL HAL 」を参照してください。

回復

Android 13 では、リカバリでバインダーがサポートされています。 Health AIDL サービスをリカバリにインストールすると、リカバリ モードで実行できます。

Health AIDL サービスをリカバリにインストールする方法については、次を参照してください。

充電器

オフモード充電の機能は/systemから/vendorに移動されました。 Android 13 で起動するデバイスでオフモード充電をサポートする場合、HAL サービス バイナリは充電モードをサポートする必要があります。これを行うには、 Charger の実装を参照してください。

充電器システムのプロパティ

プロパティro.charger.*は、 /vendorchargerバイナリによって読み取れなくなりました。デバイスにro.charger.*システム プロパティが設定されている場合は、charger のシステム プロパティを参照してください。