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 では、次の図で示すようにヘルス コンポーネントが動作します。
図 1. Android 8.x の Health
図の説明:
- フレームワークによるハードウェアとの通信に、1 つのバインダー呼び出しと 1 つの hwbinder 呼び出しが使用されています。
healthd
がlibhealthd_android
、libbatterymonitor
、libbatteryservice
に静的にリンクしています。- health@1.0-impl が
libhealthd.BOARD
に静的にリンクしています。
ボードごとに異なる libhealthd.BOARD
をカスタマイズできます。charger、health@1.0-impl、recovery のリンク先はビルド時に決まります。
その他のモードの場合:
図 2. Android 8.x Health、オフモード充電、リカバリモード
- charger は
libhealthd.BOARD
、libhealthd_charger
、libbatterymonitor
に静的にリンクしています。 - recovery は
libhealthd.BOARD
とlibbatterymonitor
に静的にリンクしています。
Android 9 の Health
Android 9 では、次の図で示すようにヘルス コンポーネントが動作します。
図 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 から情報を取得することはありません。
その他のモードの場合:
図 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 の実装をご覧ください。