Android 11 添加了新的 HAL IDumpstateDevice(版本 1.1)。此 HAL 指明了新的方法,以便更严格地对标准 bug 报告中包含的供应商日志进行分区,并允许用户 build 开启和关闭供应商日志记录(用户 build 的默认设置为关闭)。通过这种方式,原始设备制造商 (OEM) 可以更好地控制在特定类型的 bug 报告中包含哪些内容。
如果 OEM 选择实现此可选 HAL,则此功能会影响 OEM。SoC 可能会受到影响,具体取决于 OEM 选择与此 HAL 公开的内容。运营商预计不会受到任何影响。
bug 报告中包含的内容取决于您认为与调试相关的信息,但一般来说,越详细越好。
示例和来源
(已废弃的)1.0 版本 IDumpstateDevice 的默认实现,展示了使用 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/
下。 - 用于控制 bug 报告内容的 dumpstate 原生代码位于
frameworks/native/cmds/dumpstate/
下。
实现
要实现此 HAL,请实现 android.hardware.dumpstate@1.1::IDumpstateDevice
HAL 接口。可能有很多 DumpstateMode
值,但单个设备可能无法支持所有值(例如,适用于非 Wear OS 设备的 WEAR)。
实现转储转储 HAL 是可选的。所有搭载 Android 11 的新设备都必须实现 DumpstateDevice 1.1(如果这些设备实现了 Dumpstate HAL)。在 Android 11 之前已实现 IDumpstateDevice 1.0 的设备升级到 1.1 会相对容易,我们强烈建议这样做,因为这样可以大大减少 bug 报告中包含的无关隐私信息量。
此功能还取决于 Android 11 中 Android frameworks/native/cmds/dumpstate
下包含的核心转储状态变化。
实现此 HAL 可能需要对某些系统属性、文件等进行一些 SEPolicy 更改才能正常运行,并且需要与供应商协调以将所有相关信息转储到 bug 报告中。
自定义
设备用户可以使用开发者设置开启或关闭供应商日志记录功能。
关闭该功能后,dumpstateBoard_1_1
可能仍会输出由 OEM 确定的最小基本信息。关闭供应商日志记录后,IDumpstateDevice::dumpstateBoard
只会向错误报告添加必要的信息,而开启该功能则会包含 OEM 选择的任何信息。
您可以修改 dumpstate.cpp
(用于调用 UnDumpstateDevice HAL 方法),例如为了增加 dumpstateBoard
的超时。不过,dumpstate.cpp
的核心逻辑应保持不变。
超时可以是任何值,但不应大幅增加完成 bug 报告所需的时间。特别是,DumpstateMode::CONNECTIVITY
具有极高的敏感性,需要尽快运行以收集所有相关的调制解调器/WLAN/网络日志。
验证
针对 IDumpstateDevice 实现有 VTS 测试,常规 BugreportManager
功能有功能单元测试。
建议的手动测试用例为 frameworks/base/core/tests/bugreports/src/android/server/bugreports/BugreportManagerTest.java
。