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

ヘルス2.1の実装

アンドロイド11において、全てhealthdコードがにリファクタリングさlibhealthlooplibhealth2impl 、次いでhealth@2.1のHALを実装するように変更。これらの2つのライブラリを静的にリンクされていることにより、 health@2.0-impl-2.1 、健康2.1のパススルー実装。静的にリンクされたライブラリが有効health@2.0-impl-2.1同じ作業を行うためにhealthdなど実行しているとして、 healthd_mainloopポーリング。 INITにおいて、 health@2.1-serviceインターフェースのインプリメンテーションレジスタIHealthhwservicemanager 。 Android8.xまたは9ベンダーイメージとAndroid11フレームワークを備えたデバイスをアップグレードする場合、ベンダーイメージがhealth@2.1サービスを提供しない場合があります。古いベンダーの画像との後方互換性がによって強制された廃止予定

下位互換性を確保するには:

  1. healthd登録IHealthするhwservicemanagerシステムデーモンであるにもかかわらず。 IHealthインスタンス名「バックアップ」で、システムのマニフェストに追加されます。
  2. フレームワークとstoragedと通信healthd介しhwbinder代わりのbinder
  3. フレームワークのコードとstoraged利用可能な場合、「デフォルト」、その後「バックアップ」のインスタンスを取得するように変更されています。
    • C ++クライアントコードはで定義されたロジック使用libhealthhalutils
    • Javaクライアント・コードは、で定義されたロジック使用HealthServiceWrapper
  4. IHealth後/デフォルトでは広く利用可能であるとAndroid 8.1ベンダーのイメージが廃止され、IHealth /バックアップとhealthd廃止されることができます。詳細については、卑下するhealth@1.0を

healthdのボード固有のビルド変数

BOARD_PERIODIC_CHORES_INTERVAL_*ビルドに使用ボード固有の変数ですhealthd 。システム/ベンダービルド分割の一部として、ボード固有の値は、システムモジュールのために定義することができません。これらの値は、非推奨の関数でオーバーライドするために使用さhealthd_board_init

health@2.1では、ベンダーは、これらの2つの周期的な雑用間隔値上書きできhealthd_config健康実装クラスのコンストラクタに渡す前に構造体を。健康実装クラスから継承する必要がありますandroid::hardware::health::V2_1::implementation::Health

Health2.1サービスの実装

健康2.1サービスの実装については、参照ハードウェア/インターフェース/健康/ 2.1 / README.mdを

健康クライアント

health@2.xには次のクライアントがあります。

  • 充電器。使用libbatterymonitorhealthd_commonコードがに包まれhealth@2.0-impl
  • 回復。結合libbatterymonitorに包まれhealth@2.0-impl 。すべてのコールBatteryMonitorへの呼び出しに置き換えられHealth実装クラス。
  • BatteryManager。 BatteryManager.queryProperty(int id)のクライアントだけだったIBatteryPropertiesRegistrar.getPropertyIBatteryPropertiesRegistrar.getProperty提供されたhealthdと直接読む/sys/class/power_supply

    セキュリティ上の考慮事項として、アプリがヘルスHALに直接呼び出すことは許可されていません。アンドロイド9以降では、バインダーサービスIBatteryPropertiesRegistrarによって提供されるBatteryService代わりにhealthdBatteryService代表団は、健康HALの呼び出しが要求された情報を取得します。

  • BatteryService。 Androidの9以上では、 BatteryService使用していますHealthServiceWrapperからデフォルトの健康サービスインスタンスを使用するかどうかを判断するためにvendorやからバックアップ保健サービスのインスタンスを使用するhealthdBatteryService 、その後を経由して健康イベントをリッスンIHealth.registerCallback

  • Storaged。 Androidの9以上では、 storaged用途のlibhealthhalutilsからデフォルトの健康サービスインスタンスを使用するかどうかを判断するためにvendorやからバックアップ保健サービスのインスタンスを使用するhealthdstoragedその後経由して健康イベントをリッスンIHealth.registerCallbackと取り出しストレージ情報。

SELinuxの変更

health@2.1 HALには、プラットフォームに次のSELinuxの変更が含まれています。

  • 追加はandroid.hardware.health@2.1-servicefile_contexts

独自の実装を持つデバイスの場合、ベンダーのSELinuxの変更が必要になる場合があります。例:

# device/<manufacturer>/<device>/sepolicy/vendor/hal_health_default.te
# Add device specific permissions to hal_health_default domain, especially
# if it links to board-specific libhealthd or implements storage APIs.

カーネルインターフェース

healthdデーモンとデフォルトの実装android.hardware.health@2.0-impl-2.1アクセスバッテリ情報を取得するために、次のカーネル・インタフェース:

  • /sys/class/power_supply/*/capacity_level (健康2.1で追加)
  • /sys/class/power_supply/*/capacity
  • /sys/class/power_supply/*/charge_counter
  • /sys/class/power_supply/*/charge_full
  • /sys/class/power_supply/*/charge_full_design (健康2.1で追加)
  • /sys/class/power_supply/*/current_avg
  • /sys/class/power_supply/*/current_max
  • /sys/class/power_supply/*/current_now
  • /sys/class/power_supply/*/cycle_count
  • /sys/class/power_supply/*/health
  • /sys/class/power_supply/*/online
  • /sys/class/power_supply/*/present
  • /sys/class/power_supply/*/status
  • /sys/class/power_supply/*/technology
  • /sys/class/power_supply/*/temp
  • /sys/class/power_supply/*/time_to_full_now (健康2.1で追加)
  • /sys/class/power_supply/*/type
  • /sys/class/power_supply/*/voltage_max
  • /sys/class/power_supply/*/voltage_now

使用する任意のデバイス固有の健康HAL実装libbatterymonitor健康実装クラスのコンストラクタに上書きされない限り、デフォルトではこれらのカーネル・インターフェースにアクセスします。

これらのファイルが見つからないかからアクセスすることができない場合healthdまたはデフォルトのサービスから、彼らが正常に機能しない場合があります(たとえば、ファイルがあるため設定に誤りSELinuxポリシーのアクセスを拒否し、ベンダー固有のフォルダへのシンボリックリンクです)。したがって、デフォルトの実装が使用されている場合でも、ベンダー固有のSELinuxの追加の変更が必要になる場合があります。

以下のような健康2.1で使用されるいくつかのカーネル・インタフェース、 /sys/class/power_supply/*/capacity_levelおよび/sys/class/power_supply/*/time_to_full_now 、任意であってもよいです。しかし、不足しているカーネル・インタフェースから生じた不正確なフレームワークの動作を防ぐために、それはチェリーピックに推奨されるCL 1398913健康HAL 2.1サービスを構築する前に。

テスト

Androidの11は新しい含まVTSテストhealth@2.1のHALのために特別に書かれています。デバイスがデバイスマニフェストでhealth@2.1HALを宣言する場合、対応するVTSテストに合格する必要があります。試験は、(ことを保証するために、デフォルトのインスタンス(デバイス実装正しくHALことを確実にするために)、バックアップインスタンスの両方のために書かれているhealthd 、それが除去される前に正しく機能し続けます)。

バッテリー情報の要件

health 2.0 HALは、HALインターフェースに関する一連の要件を示していますが、対応するVTSテストは、それらを実施する際に比較的緩和されています。 Android 11では、Android 11以降で起動するデバイスに次の要件を適用するために、新しいVTSテストが追加されています。

  • 瞬時および平均バッテリ電流の単位はマイクロアンペア(μA)である必要があります。
  • 瞬時および平均バッテリー電流の符号は正しくなければなりません。具体的には:
    • 現在== 0バッテリーの状態があるときにUNKNOWN
    • > 0現在のバッテリーの状態がされCHARGING
    • バッテリの状態があるときに、現在の<= 0 NOT_CHARGING
    • 現在<0バッテリーの状態がされてDISCHARGING
    • バッテリの状態があるときに適用されませんFULL
  • バッテリーの状態は、電源が接続されているかどうかに対して正しい必要があります。具体的には:
    • 電池の状態のいずれかでなければならないCHARGINGNOT_CHARGING 、またはFULL場合と電源が接続されている場合のみ。
    • バッテリーの状態でなければなりませんDISCHARGINGと電源が切断された場合にだけ。

あなたが使用している場合はlibbatterymonitorカーネル・インタフェースからの値を通して、あなたの実装とパスで、sysfsのノードは正しい値を報告して確認してください。

  • バッテリー電流が正しい記号と単位で報告されていることを確認してください。これには、次のsysfsノードが含まれます。
    • /sys/class/power_supply/*/current_avg
    • /sys/class/power_supply/*/current_max
    • /sys/class/power_supply/*/current_now
    • 正の値は、バッテリーへの入力電流を示します。
    • 値はマイクロアンペア(μA)である必要があります。
  • バッテリー電圧がマイクロボルト(μV)で報告されていることを確認してください。これには、次のsysfsノードが含まれます。
    • /sys/class/power_supply/*/voltage_max
    • /sys/class/power_supply/*/voltage_now
    • デフォルトのHALの実装が分裂することに注意してくださいvoltage_nowミリボルト(mVの)に1000との報告値で。参照してください@ 1.0 :: HealthInfoを

詳細については、 Linuxの電源クラスを