Android 11 新增了 HAL (IDumpstateDevice) (1.1 版)。這個 HAL 會公開新方法,以便更精確地設定標準錯誤報告中供應商記錄的範圍,並允許使用者版本開啟或關閉供應商記錄 (使用者版本的預設值為關閉)。這可讓原始設備製造商進一步控管特定類型的錯誤報告中包含的內容。
如果原始設備製造商 (OEM) 選擇實作這個選用 HAL,這項功能就會對他們造成影響。視原始設備製造商 (OEM) 選擇透過此 HAL 公開的內容而定, SoC 可能會受到影響。 運營商不會受到任何影響。
您在錯誤報告中加入的內容取決於您認為哪些資訊與偵錯作業相關,但一般來說,越詳細越好。
範例和來源
預設實作的是 (已淘汰) 1.0 版的 IDumpstateDevice,其中顯示了使用 dumpstate 實用工具程式庫的範例:frameworks/native/cmds/dumpstate/DumpstateUtil.h
。還有 1.1 HAL 的 Cuttlefish 實作:
device/google/cuttlefish/guest/monitoring/dumpstate_ext/*
。
原始程式碼位於以下位置:
- HAL 檔案位於
hardware/interfaces/dumpstate/1.1/
下方。 - 控制錯誤報告內容的傾印狀態原生程式碼位於
frameworks/native/cmds/dumpstate/
下方。
實作
如要實作此 HAL,請實作 android.hardware.dumpstate@1.1::IDumpstateDevice
HAL 介面。DumpstateMode
值有很多可能的值,但單一裝置可能不支援所有值 (例如 WEAR 和非 Wear OS 裝置)。
您可以選擇實作轉儲狀態 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
。