下面给出一份「从 0 到 1」在真机上使用 Perfetto 的完整流程,涵盖 命令行 与 Web UI 两种主流抓 trace 方式,按需抄作业即可。所有步骤均基于 2025 年最新官方方案,兼容 Android 10+(含 Android 14/15)。
1. 准备阶段(一次搞定)
| 步骤 | 操作要点 | 备注 |
|---|---|---|
| ① 打开 USB 调试 | 设置 → 关于手机 → 版本号连点 7 次 → 开发者选项 → 打开「USB 调试」 | 部分品牌还需开「USB 调试(安全设置)」 |
| ② 检查 Perfetto 服务 | adb shell perfetto --version 能回显版本号即可 |
Android 11+ 默认已集成;Android 9/10 需执行 adb shell setprop persist.traced.enable 1 重启手机 |
| ③ 宿主机安装 adb | Windows 可直接下 SDK Platform-Tools 解压到任意 PATH | Linux/macOS apt install android-tools-adb |
2. 极简命令行抓 trace(30 秒上手)
适合「只想快速抓一次」的场景,无需写配置文件。
bash
# 抓 10 s,包含 CPU 调度+图形+ binder 驱动等常用标签
adb shell perfetto -o /data/misc/perfetto-traces/demo.pftrace -t 10s \
sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
# 拉取到电脑
adb pull /data/misc/perfetto-traces/demo.pftrace .
完成后用浏览器打开 ui.perfetto.dev → Open trace file 即可可视化。
3. 高级:自写配置,精准抓取
当需要 指定缓冲区大小、抓取 Native 内存、自定义 ftrace 事件 时,推荐写 .pbtx 文本配置,可重复利用。
3.1 示例配置(保存为 trace.cfg)
protobuf
duration_ms: 30000 # 30 s
buffers: {
size_kb: 65536
fill_policy: DISCARD
}
data_sources: {
config {
name: "linux.ftrace"
ftrace_config {
ftrace_events: "sched/sched_switch"
ftrace_events: "power/suspend_resume"
atrace_categories: "gfx"
atrace_categories: "view"
atrace_apps: "com.example.app" # 替换成你的包名
}
}
}
data_sources: {
config {
name: "linux.process_stats"
target_buffer: 0
process_stats_config {
scan_all_processes_on_start: true
}
}
}
3.2 推入手机并执行
bash
# 推送配置
adb push trace.cfg /data/local/tmp/trace.cfg
# 抓取(Android 12+ 可用 -c 直接接文件;老版本需 cat 管道)
adb shell 'cat /data/local/tmp/trace.cfg | perfetto --txt -c - -o /data/misc/perfetto-traces/trace.pftrace'
# 拉取
adb pull /data/misc/perfetto-traces/trace.pftrace .
4. 零配置:WebUI 一键抓取(懒人最爱)
- 电脑打开 ui.perfetto.dev → Record new trace
- 选 Android → Connect new device(Chrome/Edge 支持 WebUSB)
- 在页面上勾选数据源(CPU、Memory、Native Heap 等)→ 点 Start Recording
- 操作手机复现场景 → 结束录制,网页自动跳转到分析页。
注意:Firefox 不支持 WebUSB,请用 Chromium 内核浏览器。
5. 分析 trace 的 3 个常用入口
| 目的 | 操作 |
|---|---|
| 看卡顿 | 搜索 Choreographer#doFrame 或 DrawFrame → 检查是否超过 16.6 ms |
| 看 Binder 阻塞 | 搜索 binder_driver → 观察蓝色长条 |
| 看内存泄漏 | 启用 heapprofd → 在 UI 选 Native Heap → 按分配大小排序 |
Perfetto UI 支持 SQL 查询,按 : 调出输入框即可,例如:
sql
select * from slice where name like '%doFrame%' order by dur desc;
6. 常见问题速查
- 抓不到 trace :确认
adb devices有设备;Android 9/10 需先开persist.traced.enable。 - pull 失败 :老机型
/data/misc/perfetto-traces权限受限,可改用adb shell cat ... > trace迂回导出。 - SELinux 拒绝读取配置 :非 root 机用
cat xxx | perfetto -c -管道方式即可。
7. 一键脚本模板(可 CI)
把下面保存为 record.sh,chmod +x 后直接 ./record.sh 30 抓 30 秒:
bash
#!/bin/bash
DUR=${1:-10}
OUT="trace_$(date +%Y%m%d_%H%M%S).pftrace"
adb shell perfetto -o /data/misc/perfetto-traces/$OUT -t ${DUR}s \
sched freq idle am wm gfx view binder_driver hal dalvik camera input res memory
adb pull /data/misc/perfetto-traces/$OUT .
echo "done, file: $OUT"
结论
- 最快体验 :命令行
adb shell perfetto ...十秒抓完。 - 最灵活 :写
.pbtx配置,精准控制事件/缓冲区/进程。 - 最懒人 :打开 ui.perfetto.dev 点几下鼠标就能抓。
抓到 .pftrace 后,同一网页就能打开分析,无需再装其他工具。祝你调试愉快!