📚一 Android 性能测试完整教程
1. 测试内容(要测哪些指标?)
常规来说,Android 性能测试重点包括:
类别 | 具体指标 |
---|---|
启动性能 | 冷启动、热启动、冷后台启动时间 |
流畅度 | 帧率(FPS)、丢帧率、Jank(卡顿)数 |
内存占用 | App内存(PSS、RSS)、内存泄漏检测 |
CPU 占用 | App进程CPU占用率,峰值/均值 |
电量消耗 | 单位时间耗电量、电池温度变化 |
GPU 渲染 | GPU Overdraw、GPU占用率 |
网络性能 | 请求耗时、失败率、数据量 |
存储占用 | 安装包大小、缓存文件大小 |
特别是车载应用(IVI系统),还需要特别注意:
- 冷启动速度(开机进入座舱应用很敏感)
- 内存占用(因为车机硬件一般比手机小)
- 帧率和卡顿率(人眼敏感,影响高级感)
2. 测试方法(怎么测?)
分成两大类:
方法 | 说明 |
---|---|
官方工具测量 | 使用 Android Profiler, Systrace, GPU 渲染分析等官方工具 |
脚本自动化测量 | 用 adb 命令、Perfetto、Battery Historian 等收集数据 |
简单举例:
- 启动时间
adb shell am start -W 包名/启动Activity
- FPS帧率
adb shell dumpsys gfxinfo 包名
- 内存
adb shell dumpsys meminfo 包名
- 电池耗电
adb shell dumpsys batterystats
3. 工具推荐(超实用)
类别 | 工具 | 说明 |
---|---|---|
帧率卡顿 | dumpsys gfxinfo / Perfetto | 精准分析UI绘制过程 |
启动时间 | am start -W | 官方方法 |
内存 | Android Studio Profiler / LeakCanary | 监控&检测内存泄漏 |
CPU/GPU | Android Studio Profiler / Perfetto | 可视化线程调度、渲染流程 |
电池 | Battery Historian | 分析耗电来源 |
卡顿分析 | Systrace / Perfetto | 精细到线程/方法级卡顿 |
4. 标准测试流程(怎么一步步测试?)
【测试前准备】
- 手机/车机设置为「开发者模式」
- 打开「USB调试」和「显示刷新率」
- 保持系统状态一致(不要乱动)
【测试步骤】
启动时间测试
adb shell am start -W 包名/启动Activity
看 TotalTime 和 WaitTime。
帧率流畅度测试
adb shell dumpsys gfxinfo 包名
查看 FrameData(丢帧次数、绘制时间)
或者用 Perfetto录一段trace分析。
内存占用测试
adb shell dumpsys meminfo 包名
看 PSS(Proportional Set Size)。
用 Android Profiler -> Memory -> Capture heap。
CPU测试
用 Android Profiler -> CPU -> Record trace。
看主线程有没有卡住(主线程>16ms绘制一帧就算卡顿)。
电量测试
- 充满电
- 断电
- 只运行APP,记录一段时间
- 用 Battery Historian 分析耗电来源
【测试后总结】
- 出现异常:卡顿、内存泄漏、过高耗电,要记录下来。
- 对比基线:最好和历史版本数据对比。
- 图表化结果:帧率、耗电量做成图表,方便展示。
5. 注意事项
- 测试环境固定:同一设备、同一版本、相似系统负载。
- 多次采样取平均值,避免单次误差。
- 录屏容易影响性能测试结果(尤其是FPS),要注意。
- 车机设备由于不同于手机,可能要在车机实际跑(不要只靠模拟器)。
📈 补充进阶
可以学会使用:
- Perfetto Trace(系统追踪分析)
- Systrace(方法级卡顿分析)
- Jetpack Macrobenchmark(安卓官方性能基准测试库)
这些在高质量车载应用开发中是标配技能,尤其是针对“座舱系统启动速度优化”“车载系统不卡顿”这种高级目标。
🚀 总结一句话
想做好 Android 性能测试,本质就是:掌握正确指标、熟练使用工具、规范操作流程。
二 完整 Android 性能测试命令清单 + 测试模板表格
📜 Android 性能测试命令清单
1. 启动时间测试
adb shell am start -W 包名/启动Activity
TotalTime
:总启动耗时(ms)WaitTime
:等待时间(ms)
2. 流畅度 / 帧率 / Jank 测试
adb shell dumpsys gfxinfo 包名
- 查看每一帧绘制耗时(理想一帧 < 16.67ms)
Janky frames
:卡顿帧数量Frame time percentiles
:帧时间分布
也可以直接打开开发者选项,开启【GPU 渲染分析】。
3. 内存使用情况测试
adb shell dumpsys meminfo 包名
TOTAL PSS
:实际占用内存(越小越好)Native Heap
/Dalvik Heap
:本地堆 / 虚拟机堆使用情况
4. CPU 占用率测试
实时监测:
adb shell top -m 10
只看某个进程(比如包名叫 com.example.app):
adb shell top -o CPU -p `adb shell pidof 包名`
5. 电池/耗电测试
重置电池历史数据:
adb shell dumpsys batterystats --reset
充电器拔掉后,使用APP一段时间,采集:
adb shell dumpsys batterystats > /sdcard/batterystats.txt
adb pull /sdcard/batterystats.txt
然后导入 Battery Historian 分析。
6. 帧渲染/卡顿深入分析(Perfetto Trace)
录制一段 Perfetto Trace:
adb shell perfetto --config /data/misc/perfetto-traces/record.cfg -o /data/misc/perfetto-traces/trace_file.perfetto-trace
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace
然后去 Perfetto UI 打开文件分析。
7. 应用包体积分析
apk analyzer
(在 Android Studio 中打开 APK Analyzer)
可以看:
- dex文件大小
- 资源文件大小
- 总体积分布
📝 性能测试模板表格(可直接填)
测试项 | 工具/命令 | 测量结果 | 备注 |
---|---|---|---|
冷启动时间 | adb shell am start -W | (填写ms) | Cold Start |
热启动时间 | adb shell am start -W | (填写ms) | Warm Start |
帧率FPS | adb shell dumpsys gfxinfo | (填写平均FPS) | |
丢帧率 | adb shell dumpsys gfxinfo | (填写%) | |
CPU占用率 | adb shell top | (填写%) | |
内存占用 | adb shell dumpsys meminfo | (填写PSS大小) | |
电池消耗 | Battery Historian | (填写耗电量mAh) | |
GPU Overdraw | GPU渲染分析 | (简单过度情况) | |
包体积大小 | apk analyzer | (填写MB) | |
发现的问题 | 记录 | 卡顿/泄漏/异常耗电等 | |
优化建议 | 记录 | 优化方向总结 |
🛠 附加实用技巧:
- 连续测3~5次,取平均值,更准确。
- 测冷启动时,必须杀掉进程再启动。
- 车载设备上,如果可以,用 logcat+trace 文件一起采集,便于定位。