Android Aflags

此数据源仅在 Android 上受支持。需要 /system/bin/aflags 工具,该工具在较新的 Android 版本中已预置。

"android.aflags" 数据源采集 Android aconfig flags 的快照,aconfig flags 是用于管理 Android 平台功能发布和行为的配置系统。

这使你能够记录任意一次 trace 中设备上激活了哪些 feature flag 及其值。当比较不同构建版本之间的 trace 时,或者行为变化只能通过正在进行的 flag 发布来解释时,这非常有用。

底层实现上,traced_probes 调用 /system/bin/aflags list --format proto,解码输出后每次轮询写入一个 TracePacket。周期性轮询可通过 poll_ms 启用(最小 1000ms)。

UI

在 UI 层面,aflags 以 "Android Aflags" 表格形式展示在 trace 信息页面的 Android 标签下。如果 trace 包含多个快照(周期性轮询),表格上方有一个下拉框允许你在不同时间戳之间切换。

SQL

在 SQL 层面,aflags 数据通过 android.aflags 标准库模块暴露。android_aflags 视图中的每一行代表单个 flag 在特定时间戳下的状态(ts 列)。

以下是列出 flag 及其当前值的示例:

INCLUDE PERFETTO MODULE android.aflags; select ts, package, name, value, permission from android_aflags order by package, name
ts package name value permission
12345 perfetto.flags buffer_clone_preserve_read_iter enabled read-only
12345 perfetto.flags save_all_traces_in_bugreport enabled read-write
12345 perfetto.flags track_event_incremental_state_clear_not_destroy enabled read-only
12345 perfetto.flags use_lockfree_taskrunner enabled read-write

以下是查找值被从默认值覆盖的 flag 的示例(有助于调试行为与干净构建不一致的原因):

INCLUDE PERFETTO MODULE android.aflags; select package, name, value, value_picked_from, storage_backend from android_aflags where value_picked_from != 'default'
package name value value_picked_from storage_backend
perfetto.flags save_all_traces_in_bugreport enabled server device_config
perfetto.flags use_lockfree_taskrunner disabled local aconfigd

如果 aflags 工具在运行时失败,trace 级别的错误会记录在 stats 表中,名称为 android_aflags_errors

select name, severity, source, value, description from stats where name = 'android_aflags_errors'
name severity source value description
android_aflags_errors error trace 1 Errors occurred during the collection of Android aconfig flags by the android.aflags data source. This typically happens if the aflags tool fails or its output is malformed.

TraceConfig

Android aflags 通过 trace config 的 AndroidAflagsConfig 部分进行配置。

配置示例 — 在 trace 开始时采集单次快照:

data_sources: { config { name: "android.aflags" } }

配置示例 — 周期性轮询(每次轮询约耗时 350ms;poll_ms 必须 >= 1000):

data_sources: { config { name: "android.aflags" android_aflags_config { poll_ms: 5000 } } }