Android 11 添加了一個新的 HAL,IDumpstateDevice(版本 1.1)。此 HAL 向包含在標準錯誤報告中的更嚴格範圍的供應商日誌公開了新方法,並允許用戶構建打開和關閉供應商登錄(用戶構建的默認設置為關閉)。這使 OEM 可以更好地控制特定類型的錯誤報告中包含的內容。
如果選擇實施此可選 HAL,此功能會影響 OEM。 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
值,但並非所有值都可能由單個設備支持(例如,非 Wear OS 設備的 WEAR)。
實現轉儲狀態 HAL 是可選的。所有搭載 Android 11 的新設備如果實現了 Dumpstate HAL,則必須實現 IDumpstateDevice 1.1。在 Android 11 之前已經實現 IDumpstateDevice 1.0 的設備應該相對容易升級到 1.1,強烈建議這樣做,因為它大大減少了錯誤報告中包含的無關私人信息的數量。
此功能取決於 Android 11 中也包含的核心轉儲狀態更改,位於frameworks/native/cmds/dumpstate
。
實施此 HAL 可能需要對某些系統屬性、文件等進行一些 SEPolicy 更改以使事情完全正常運行,並且需要與供應商協調以將所有相關信息轉儲到錯誤報告中。
定制
設備用戶可以使用開發人員設置打開或關閉供應商登錄。當它關閉時, dumpstateBoard_1_1
可能仍會輸出 OEM 確定的最少基本信息。關閉供應商註銷會使IDumpstateDevice::dumpstateBoard
僅將基本信息添加到錯誤報告中,而將其打開則包括 OEM 選擇的任何信息。
例如,您可以修改dumpstate.cpp
(它調用 IDumpstateDevice HAL 方法),以增加為完成dumpstateBoard
指定的超時時間。但是, dumpstate.cpp
的核心邏輯應該保持不變。
超時可以是任何值,但它們不應顯著增加完成錯誤報告所需的時間。特別是, DumpstateMode::CONNECTIVITY
對時間非常敏感,需要盡可能快地運行以收集所有相關的調製解調器/Wi-Fi/網絡日誌。
驗證
IDumpstateDevice 實現有一個 VTS 測試,一般BugreportManager
功能有功能單元測試。
推薦的手動測試用例是frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java
。