Android 11 では、新規の HAL である IDumpstateDevice(バージョン 1.1)が追加されています。この HAL で公開している新しいメソッドでは、標準のバグレポートに含まれるベンダーログの範囲をさらに限定するほか、ユーザービルドでベンダー ロギングのオンとオフを切り替えられるようにもします(ユーザービルドのデフォルトはオフです)。これにより、OEM は特定のタイプのバグレポートにどんな情報を含めるかをより細かく管理できるようになります。
この機能は、OEM がオプション HAL の採用を選択した場合に適用されます。SoC は、OEM がこの HAL に公開するかどうかによって影響を受ける場合があります。携帯通信会社に対して期待される影響はありません。
バグレポートに含める情報は、デバッグの際に関係する情報によって異なりますが、一般的には詳細のほうが効果的です。
例とソース
IDumpstateDevice の 1.0 バージョン(現在は非推奨)のデフォルト実装で、dumpstate util ライブラリを使用する例を示します: frameworks/native/cmds/dumpstate/DumpstateUtil.h
。1.1 HAL の Cuttlefish 実装もあります: device/google/cuttlefish/guest/monitoring/dumpstate_ext/*
。
ソースコードは次の場所にあります。
- HAL ファイルは
hardware/interfaces/dumpstate/1.1/
にあります。 - バグレポートの内容を制御する dumpstate ネイティブ コードは、
frameworks/native/cmds/dumpstate/
にあります。
実装
この HAL を実装するには、android.hardware.dumpstate@1.1::IDumpstateDevice
HAL インターフェースを実装します。DumpstateMode
値は複数指定できますが、1 台のデバイスですべてがサポートされるわけではありません(例: Wear OS 以外のデバイスでは WEAR はサポートされません)。
dumpstate HAL の実装は必須ではありません。Android 11 でリリースするすべての新しいデバイスで、Dumpstate HAL を実装する場合は、IDumpstateDevice 1.1 を実装する必要があります。Android 11 より前のバージョンで IDumpstateDevice 1.0 を実装したデバイスは、比較的簡単に 1.1 にアップグレードでき、また、アップグレードするとバグレポートに含められる余分な個人情報が大幅に削減されるため、アップグレードを強くおすすめします。
この機能は、Android 11 に含まれるコア dumpstate の変更(frameworks/native/cmds/dumpstate
にあります)によって異なります。
この HAL を実装すると、特定の動作のためにシステム システムやファイルなどに関する SEPolicy の変更がいくつか必要になります。その場合は、関連するすべての情報をバグレポートにダンプする必要があります。
カスタマイズ
デバイスのユーザーは、デベロッパーの設定を使用してベンダー ロギングの有効と無効を切り替えることができます。無効にしても、dumpstateBoard_1_1
は OEM が決定した必要最小限の情報を出力することがあります。ベンダー ロギングを無効にすると、IDumpstateDevice::dumpstateBoard
はバグレポートに必須情報のみを追加します。有効にすると、OEM が選択した情報がすべて含まれます。
dumpstate.cpp
(IdumpumDeviceDevice HAL メソッドを呼び出す)を変更して、たとえば dumpstateBoard
の完了に必要なタイムアウトを増やすことができます。ただし、dumpstate.cpp
のコアロジックは変更されません。
タイムアウトは任意の値にすることができますが、バグレポートの実行にかかる時間が大幅に長くなることはありません。特に、DumpstateMode::CONNECTIVITY
は機密性が高く、関連するモデム、Wi-Fi、ネットワークのすべてのログを収集するために、できるだけすばやく実行する必要があります。
検証
IDumstatestateDevice 実装の VTS テストと、一般的な BugreportManager
機能レベルの単体テストがあります。
推奨される手動テストケースは frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java
です。