前言
众所周知,Android adb 是一个功能强大的命令行工具,允许通过该工具直接与设备进行通信,能操控设备,也能获取设备当前的性能参数。
既然功能强大,能否通过 adb 工具扩展出一个性能检测工具呢?答案是可以的。当然性能检测和调优是一个永恒的话题,需要系统性全面的深入才能做好,以下以一个内存检测工具为例。
场景
很多时候,应用出现卡顿、掉帧、耗电过快等现象都与应用内存占用存在直接关系,如何检测应用的内存占用成了优化这些场景的第一步。 使用 adb 工具,采用定时抽样机制即可获取应用内存变化情况,再结合实际业务场景,即可逐步定位至应用的待调优部分。
架构设计
架构图
- PerformanceTool:检测入口
- DeviceFinder:负责查找设备
- Config:记录和提供各种配置
- Monitor:负责各个性能参数检测,这里只实现了内存检测,即 MemoryMonitor
- CmdExecutor:执行 adb 指令
方法设计
以 Monitor 为例
核心可分为启动执行、收集数据、输出图表三大方法
代码实现
开发环境
python: python3、matplotlib、xlwt、xlrd、xlutils
IDE: VS Code
OS: Windows10
关键方法
内存 adb 指令
adb -s [deviceSerialNo] shell dumpsys meminfo [packageName]
检测入口 PerformanceTool
分三步走
第一步:查找设备
第二步:启动内存检测脚本
第三步:生成 excel 文件,输出图表
from MemoryMonitor import MemoryMonitor
import DeviceFinder
import Config
import time
import os
def main():
print("Detection Start")
# 查找设备
isFindDeviceSuccess = DeviceFinder.findDevice()
if isFindDeviceSuccess == False :
print("Detection End")
return
# 创建报告目录
if os.path.exists(Config.reportPath) == False :
os.makedirs(Config.reportPath)
# 记录开始检测时间,单位:s
startDetectionTime = time.time()
# 执行内存检测程序
memoryMonitor = MemoryMonitor()
memoryMonitor.execute()
# 检测结束,生成图表
while time.time() - startDetectionTime <= Config.detectionTime * 60 :
continue
print("generateChart start...")
memoryMonitor.generateChart()
print("generateChart end")
# 结束所有检测
memoryMonitor.stop()
print("Detection End")
main()
源码地址
效果
通过配置 Config 文件,最终输出以下折线图
原始文件也保存在对应的 excel 文件中
mobileperf
实际上,mobileperf 就是采用类似的方案:采样-记录数据-输出。检测的项目更全、更详细,包括CPU、fps帧率、内存、logcat等一系列性能参数的检测,同时还支持 monkey ,朝自动化检测迈了一大步。
mobileperf 地址:点我
后记
性能优化的前提是有足够全面的、详细的数据提供分析,从现象入手,由表及里,一步步深入至待调优的部分。本文仅作抛砖引玉。