第二章 测试环境搭建:手机设备准备与基础配置
做性能基准测试,环境搭建是根基。根基不稳,数据全废。
我见过太多团队抱怨测试结果不稳定,查到最后发现是手机没Root、动画没关、CPU频率忽高忽低……说白了,这不是工具的问题,是准备工作没做到位。
这一章,我带你一步步把手机调成“干净”的测试状态。做完这一步,你后面跑出来的数据才有说服力。
2.1 手机设备选择
别拿主力机做测试。你想想,微信通知、App自动更新、来电震动……这些都能让测试曲线崩掉。
我个人习惯准备一台专门的测试机,最好是和用户主流机型一致的设备。比如你们App主要覆盖骁龙8系机型,那就整一台同SoC的。
另外注意以下几点:
- 尽量选能解锁BL的机型——像Pixel、OnePlus、部分小米机型都行。华为近几年的机型把BL锁死,Root很麻烦,不建议做测试机。
- 电池健康度别太差——电池老化会导致降频,甚至强制关机。我之前用一台电池损耗30%的机器测游戏帧率,结果跑两分钟就降频,浪费了我一整天。
- 存储空间留够5GB+——测试日志、截图、录屏都很吃空间。
2.2 获取Root权限
没有Root,很多底层的性能数据抓不到。比如CPU频率、GPU频率、内存带宽、I/O调度策略……这些信息需要/sys/devices/system/等文件系统权限。
Root方式常见两种:
- Magisk(推荐):修补boot.img后刷入,有系统无痛重启,支持隐藏Root。我一直在用。
- KernelSU:内核级Root,需要内核支持,适合激进派。新手不建议。
解锁Bootloader后刷入Magisk,步骤大致:
# 解锁BL(以Pixel为例)
fastboot flashing unlock
# 刷入当前固件的boot.img到手机
adb push boot.img /sdcard/
# 在手机上打开Magisk App → 安装 → 修补boot文件
# 刷回修补后的boot
fastboot flash boot magisk_patched-*.img
fastboot reboot
Root之后,建议立刻安装Scene 5或Kernel Adiutor这类工具,方便后续调整CPU/GPU参数。
2.3 开发者选项与USB调试
开发者选项是测试环境的标配入口。开启方式不用多说了吧?
进入设置 → 关于手机 → 连点「版本号」7次 → 返回就能看到。然后你需要确保以下开关打开:
| 设置项 | 状态 | 说明 |
|---|---|---|
| USB调试 | 开启 | 让ADB能连接设备 |
| 保持唤醒 | 开启 | 插电时屏幕常亮,防止锁屏 |
| 不保留活动 | 关闭 | 如果开启会导致启动性能数据失真 |
| 强制GPU渲染 | 关闭 | 测试标准OpenGL/Vulkan时不应强制 |
adb devices
# 输出类似:
# List of devices attached
# 0123456789ABCDEF device
如果出现unauthorized,说明手机没确认授权。屏幕上看一下,点「允许USB调试」就行。
2.4 禁用动画
做性能测试,动画是最大的干扰项之一。你想想,一个Activity启动动画多加了50ms,你测出来的冷启动时间还能反映真实性能吗?
我遇到过——有次帮某大厂做应用启动优化验证,对方说优化了100ms,结果我拿他手机一测,启动时间根本没变。最后发现他把动画缩放参数调成了0.5x,UI显示快了,实际业务代码没动……这根本不算优化。
禁用方法很简单,在开发者选项里改三个参数:
# 命令行一键设置
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
或者直接在开发者选项中分别把「窗口动画缩放」「过渡动画缩放」「动画程序时长缩放」调成0。
adb shell getprop debug.sf.nobootanimation确认。
2.5 固定CPU频率
这才是整个章节的硬核部分。
默认情况下,CPU频率会随负载动态变化——低频省电、高频高能。但做基准测试时,我们希望排除DVFS干扰,让CPU稳定在一个固定频率上跑,这样对比出的数据才公平。
具体做法:
- 查看CPU核心列表:
ls /sys/devices/system/cpu/会看到cpu0, cpu1, … - 每个核心有独立的
cpufreq目录,里面包括scaling_available_frequencies(可用频率列表)和scaling_max_freq/scaling_min_freq。
举个实操例子(假设设备有8核,大小核架构):
# 检查可用频率
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
# 输出类似:300000 576000 768000 1017600 1248000 1363200 1555200 1804800
# 锁定大核到最高频(以1804800为例)
echo 1804800 > /sys/devices/system/cpu/cpu4/cpufreq/scaling_max_freq
echo 1804800 > /sys/devices/system/cpu/cpu4/cpufreq/scaling_min_freq
# 同时也要设置governor为performance,避免内核自动调节
echo performance > /sys/devices/system/cpu/cpu4/cpufreq/scaling_governor
# 小核可以锁定到最高频或某个固定值
echo 1555200 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 1555200 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
su或通过Magisk模块修改。如果报错"Permission denied",乖乖用 Root 权限执行。另外温度太高时会触发thermal throttling,即使用户锁频也会被降回去——所以测试前确保手机吃凉快一点,或者加个散热背夹。
锁频之后怎么验证生效?用cat读一下当前频率:
cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq
# 如果输出是1804800,说明锁住了
也可以装个CPU Float这类悬浮窗工具,实时看各核心频率。不过记得测完要恢复默认,不然日常用手机发热严重还费电。
2.6 最后检查清单
准备开测前,按下面清单走一遍:
- 手机连接USB线,
adb devices看到设备且状态为device。 - 开发者选项里三个动画缩放全为0。
- CPU所有核心已锁定到固定频率(performance governor)。
- 屏幕亮度手动调到50%并关闭自动调节。
- 关闭Wi-Fi、蓝牙、GPS、NFC等无线模块(减少后台干扰)。
- 进入「设置 → 电池」确认没有开启省电模式或性能模式。
做完这些,你的测试环境才算真正“干净”。