第二章 测试环境搭建:手机设备准备与基础配置

做性能基准测试,环境搭建是根基。根基不稳,数据全废。

我见过太多团队抱怨测试结果不稳定,查到最后发现是手机没Root、动画没关、CPU频率忽高忽低……说白了,这不是工具的问题,是准备工作没做到位。

这一章,我带你一步步把手机调成“干净”的测试状态。做完这一步,你后面跑出来的数据才有说服力。

测试环境搭建核心流程 测试环境搭建 硬件准备 系统准备 性能设置 设备选择 充电/存储 Root权限 USB调试 禁用动画 固定CPU频率 💡 核心原则: • 一次只变一个变量 • 所有测试前先跑稳定性确认 完成后务必锁死CPU频率后再开始测试

2.1 手机设备选择

别拿主力机做测试。你想想,微信通知、App自动更新、来电震动……这些都能让测试曲线崩掉。

我个人习惯准备一台专门的测试机,最好是和用户主流机型一致的设备。比如你们App主要覆盖骁龙8系机型,那就整一台同SoC的。

另外注意以下几点:

  • 尽量选能解锁BL的机型——像Pixel、OnePlus、部分小米机型都行。华为近几年的机型把BL锁死,Root很麻烦,不建议做测试机。
  • 电池健康度别太差——电池老化会导致降频,甚至强制关机。我之前用一台电池损耗30%的机器测游戏帧率,结果跑两分钟就降频,浪费了我一整天。
  • 存储空间留够5GB+——测试日志、截图、录屏都很吃空间。
我的推荐组合:Pixel 6/7(原生AOSP,无厂商魔改)+ 一条稳定USB 3.0线缆 + 独立USB口(别插在HUB上)。

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
注意:解锁BL会清除手机所有数据。做之前备份好资料。另外解锁后有些银行App/游戏会检测并拒绝运行,测试机无所谓,但别拿主力机试。

Root之后,建议立刻安装Scene 5或Kernel Adiutor这类工具,方便后续调整CPU/GPU参数。

2.3 开发者选项与USB调试

开发者选项是测试环境的标配入口。开启方式不用多说了吧?

进入设置 → 关于手机 → 连点「版本号」7次 → 返回就能看到。然后你需要确保以下开关打开:

设置项 状态 说明
USB调试 开启 让ADB能连接设备
保持唤醒 开启 插电时屏幕常亮,防止锁屏
不保留活动 关闭 如果开启会导致启动性能数据失真
强制GPU渲染 关闭 测试标准OpenGL/Vulkan时不应强制
常用ADB验证连接:
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。

验证:执行后重新打开一个App,如果闪烁式的瞬间显示,说明动画已关。注意某些ROM可能残留硬件合成层动画,建议再跑一次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
注意:部分厂商内核限制了直接写cpufreq节点,需要su或通过Magisk模块修改。如果报错"Permission denied",乖乖用 Root 权限执行。另外温度太高时会触发thermal throttling,即使用户锁频也会被降回去——所以测试前确保手机吃凉快一点,或者加个散热背夹。

锁频之后怎么验证生效?用cat读一下当前频率:

cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq
# 如果输出是1804800,说明锁住了

也可以装个CPU Float这类悬浮窗工具,实时看各核心频率。不过记得测完要恢复默认,不然日常用手机发热严重还费电。

2.6 最后检查清单

准备开测前,按下面清单走一遍:

  1. 手机连接USB线,adb devices看到设备且状态为device。
  2. 开发者选项里三个动画缩放全为0。
  3. CPU所有核心已锁定到固定频率(performance governor)。
  4. 屏幕亮度手动调到50%并关闭自动调节。
  5. 关闭Wi-Fi、蓝牙、GPS、NFC等无线模块(减少后台干扰)。
  6. 进入「设置 → 电池」确认没有开启省电模式或性能模式。

做完这些,你的测试环境才算真正“干净”。

一句话总结:让手机变成一块稳定的“硬件黑盒”——没有动画、没有变频、没有后台骚扰。