Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

Android Health

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

  • フレームワークとベンダーコードが明確に分離される。
  • 不要な healthd デーモンのサポートが終了している。
  • ヘルス情報レポートのベンダー カスタマイズにおける自由度が高い。
  • 電池以外についてもデバイスのヘルス情報を確認できる。

要件

Android 9 でリリースするデバイスでは、2.0 HAL を提供する必要があります(1.0 HAL を提供することはできません)。Android 9 でリリースせずに、ベンダー イメージをターゲット フレームワーク互換性マトリックス バージョン 3(Android 9 でリリース済み)に更新する予定のデバイスでは、既存の 1.0 HAL 実装を削除して 2.0 HAL を提供する必要があります。

AOSP には、2.0 HAL の実装と古い 1.0 HAL からの移行に役立つ複数のヘルパー ライブラリが含まれています。

用語

  • health@1.0: android.hardware.health@1.0 の略語。Android 8.0 でリリースされた health HIDL HAL バージョン 1.0 を指します。
  • health@2.0: android.hardware.health@2.0 の略語。Android 9 でリリースされた health HIDL HAL バージョン 2.0 を指します。
  • charger: スマートフォン充電中のアニメーションを表示するオフモード充電で実行可能です。
  • recovery: 電池情報を取得する必要があるリカバリモードで実行可能です。
  • healthd: Android で動作する以前のデーモンで、ヘルス関連の情報を取得してフレームワークに提供します。
  • storaged: Android で動作するデーモンで、ストレージ情報を取得してフレームワークに提供します。

Android 8.x の Health

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

Android 8.x の Health

図 1. Android 8.x の Health

図の説明:

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

ボードごとに異なる libhealthd.BOARD をカスタマイズできます。charger、health@1.0-impl、recovery のリンク先はビルド時に決まります。

その他のモードの場合:

Android 8.x でのオフモード充電とリカバリモード

図 2. Android 8.x Health、オフモード充電、リカバリモード

  • charger は libhealthd.BOARDlibhealthd_chargerlibbatterymonitor に静的にリンクしています。
  • recovery は libhealthd.BOARDlibbatterymonitor に静的にリンクしています。

Android 9 の Health

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

図 3. Android 9 の Health

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

その他のモードの場合:

Android 9 のオフモード充電とリカバリ

図 4. Android 9 の Health、オフモード充電、リカバリモード

HAL インターフェース

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

メイン インターフェース(IHealth)には次の関数が用意されています。

  • IBatteryPropertiesRegistrar.registerListener に代わる registerCallback
  • IBatteryPropertiesRegistrar.unregisterListener に代わる unregisterCallback
  • IBatteryPropertiesRegistrar.scheduleUpdate に代わる update
  • IBatteryPropertiesRegistrar.getProperties に代わる関数は次のとおりです
    • getChargeCounter
    • getCurrentNow
    • getCurrentAverage
    • getCapacity
    • getEnergyCounter
    • getChargeStatus
    • getHealthInfo

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

  • getStorageInfo
  • getDiskStats

コールバックと getHealthInfo によって、新しい構造体 @2.0::HealthInfo が返されます。この構造体には、health@2.0 HAL から入手できる、次のようなデバイスヘルス情報がすべて含まれます。

  • 充電情報(AC / USB / ワイヤレス、電流、電圧など)
  • 電池情報(電池の有無、電池残量、電流、電圧、充電、テクノロジーなど)
  • ストレージ情報(ストレージ デバイス情報、ディスク統計情報)

Health サービスの実装については、Health の実装をご覧ください。