第2章 数据采集环境搭建:物理设备选择、USB调试、开发者选项配置、ADB授权
帧率抖动分析的第一步不是跑工具,而是搭一个干净、可控、可复现的数据采集环境。环境搭建错误会引入误报、漏报,甚至让整套分析流程失效。本章按“现象识别→数据采集→原因定位→修复动作→复测→预防”的排查逻辑,把物理设备选择、USB调试、开发者选项、ADB授权这四个关键环节逐一拆解。
2.1 现象识别:环境错误导致的假数据
典型的「环境错误现象」包括:
- PerfDog / Systrace 记录帧率始终为 0 或恒定值。
dumpsys gfxinfo输出 jank 数据全部为 0。- ADB 连接时断时续,
adb devices显示unauthorized。 - USB 调试权限弹窗反复出现。
- 帧率曲线在无操作时出现异常尖峰(可能是充电/CPU调速干扰)。
警告:不要在生产机上使用个人账号进行测试,避免 I/O 和后台同步干扰帧率。
2.2 数据采集:环境搭建标准步骤
2.2.1 物理设备选择
| 因素 | 推荐策略 | 反例 |
|---|---|---|
| 芯片平台 | 选用目标用户主流 SoC(如骁龙8 Gen2/Gen3) | 旧款麒麟或联发科低端 |
| 系统版本 | 与发布包 minSDK 一致,并支持未来两个大版本 | Android 6.0 跑新游戏 |
| 存储类型 | UFS 3.0 以上,避免I/O瓶颈掩盖真实帧率 | eMMC 5.1 |
| 电池状态 | 满电或保持充电,关闭省电模式和性能模式 | 电量低于20%触发降频 |
| 专用性 | 至少一台专用测试机,无日常应用干扰 | 使用主力机同时跑消息推送 |
2.2.2 开启USB调试与配置开发者选项
- 进入 设置 → 关于手机 → 版本号,连续点击7次直到提示「您已处于开发者模式」。
- 返回 设置 → 系统 → 开发者选项,开启 USB调试。
- 建议同时开启以下选项(按需):
- 不锁定屏幕(避免录制中断)
- 停用 HW 叠加层(强制 GPU 渲染,便于抓取真实帧)
- 显示 GPU 过度绘制(辅助视觉定位)
- 显示布局边界(排查渲染问题)
- 关闭 自动系统更新 和 自动应用更新,防止后台流量。
2.2.3 ADB 授权与验证
连接 USB 线后,首次运行:
adb kill-server
adb start-server
adb devices
手机屏幕会弹出 RSA 密钥指纹确认框,必须勾选「始终允许这台计算机」,然后点击「确定」。若没有弹出,尝试重新插拔 USB 或检查驱动。
验证授权成功后的典型输出:
List of devices attached
0123456789ABCDEF device
如果显示 unauthorized,说明授权未通过;如果显示 offline,说明驱动或线缆问题。
提示:使用
adb -s <serial> shell getprop ro.build.version.sdk 确认设备 API 级别,用于匹配测试工具兼容性。2.3 原因定位:常见环境故障树
当帧率数据采集失败时,按以下故障树排查:
| 症状 | 可能原因 | 检查命令/操作 |
|---|---|---|
adb devices 空 | USB 线缆 / 驱动 / 端口 | 换线、换端口、安装 Google USB Driver |
显示 unauthorized | RSA 指纹未确认 | 重新插拔并勾选「始终允许」 |
| PerfDog 连接后无数据 | 未开启「不锁定屏幕」或「USB调试(安全设置)」 | 检查开发者选项,允许模拟点击 |
dumpsys gfxinfo 报错 | Profile GPU 渲染未开启 | 开发者选项→GPU渲染模式→「在adb shell中显示」 |
| Systrace 无法启动 | 缺少 atrace 权限或内核限制 | adb shell atrace --list_categories 检查可用类别 |
2.4 修复动作:针对性解决
- 驱动安装:Windows 用户下载 Google USB Driver,通过设备管理器手动更新驱动。
- 授权重设:清除已保存的密钥:
再重新插拔授权。adb kill-server rm -f ~/.android/adbkey ~/.android/adbkey.pub adb start-server - 模拟点击权限:若 PerfDog/Systrace 需要模拟点击,开启「USB调试(安全设置)」选项。
- 充电干扰:使用固定充电方案,或连接 USB 3.0 口 + 原装线,避免边充边测。
2.5 复测:环境验证清单
每次开始帧率采集前,执行以下验证:
# 1. 确认设备在线且已授权
adb devices
# 2. 确认开发者选项核心开关
adb shell settings get global development_settings_enabled # 应返回1
adb shell settings get global adb_enabled # 应返回1
# 3. 确认 GPU 渲染配置(选择“在adb shell中显示”)
adb shell setprop debug.hwui.profile 1
# 4. 测试帧率采集能否正常启动
adb shell dumpsys gfxinfo com.example.app | grep -i "jank"
若以上命令均无异常输出,环境视为合格。
2.6 预防:环境标准化 SOP
- 为每个目标设备建立硬件档案(芯片、RAM、存储、驱动版本)。
- 编写环境初始化脚本,一键开启所有开发者选项:
adb shell settings put global development_settings_enabled 1 adb shell settings put global adb_enabled 1 adb shell settings put global stay_on_while_plugged_in 3 adb shell settings put global window_animation_scale 0 adb shell settings put global transition_animation_scale 0 adb shell settings put global animator_duration_scale 0 - 在 CI/CD 管道中增加「环境校验」步骤,若验证失败则阻断测试。
- 定期更新测试机的系统镜像,避免厂商系统更新带来隐性行为变化。
核心原则:环境搭建是帧率分析的地基。每台机器、每个测试周期都应使用一致的搭建流程,才能让后续的「原因定位」有可靠依据。