Android客户端性能采集工具开发

一、前言

本文章主要介绍通过adb工具对安卓游戏客户端进行性能采集开发。网络上关于adb shell指令进行性能采集的文章有很多,我也是通过看这些文章来学习的,本文章目的就是整理这些文章的内容,以方便后续查阅。

二、关于adb工具

可以下载Android SDK,我本地的版本是在platform-tools里面就包含了此工具,使用的方法也比较简单。为了方便可以将此目录添加至系统的环境变量中,这样在任何地方打开命令行,都可以执行adb命令。

常用的adb命令列表:

  • adb devices 获取连接本机的安卓设备列表。
  • adb connect ip:port 连接指定的安卓设备,连接模拟器常会用到
  • adb start-server 启动adb服务,一般无需执行,在执行其他adb命令时,如果服务器没有启动,会自动启动服务
  • adb kill-server 关闭adb服务
  • adb -s shell 进入device_name命令行交互操作,如果只有一台设备连接,可以不输入-s device_name。这里会有很多命令可以操作,具体会根据不同的需求进行逐步讲解
  • adb logcat 查看连接设备的日志.这条指令有很多扩展参数包括过滤进程,过滤日志级别等。
  • adb push <本地文件路径> <设备目录> 将本地的文件上传至设备上的指定目录。设备目录需要有可写权限才可以。
  • adb pull <设备文件路径> <本地目录> 将设备上的指定文件下载到本地的指定目录。
    Android客户端性能采集工具开发

三、性能采集相关指令

1、获取设备进程列表

adb shell pm list packages 获取已安装的app的包名,可以添加额外的参数如 -f 获取app包的路径

2、获取设备的相关信息

设备型号
adb shell getprop ro.product.model

设备系统版本
adb shell getprop ro.build.version.release

设备AndroidSDK版本号
adb shell getprop ro.build.version.sdk

设备CPU信息
cat /sys/devices/system/cpu/present  可以获取CPU的核数
cat /sys/devices/system/cpu/cpu{0}/cpufreq/cpuinfo_max_freq 然后就可以计算出CPU的最高主频

设备内存信息

adb shell cat /proc/meminfo | grep 'MemTotal' 可计算出内存大小。

设备屏幕截图

adb shell screencap -p 此方法可以重定向输入至png文件,也可直接输出然后读取写入图片文件。

设备屏幕录制

adb shell screenrecord <输出文件.mp4> 此方法本人并未实际使用,待验证。

3、获取App的相关信息

获取App的进程ID
adb shell ps | grep 这里需要注意,不同的设备指令会有所区别,有些手机需要加-A才可以。

获取App的版本
adb shell pm dump | grep 'versionName'

获取App的CPU信息
1)通过CPU时间计算 参考文章: 安卓性能测试之cpu占用率统计方法总结(https://www.jianshu.com/p/6bf564f7cdf0)
2)通过Top指令计算 adb shell top -d 1 -n 1 这个指令也需要针对不同的手机,不同的系统进行区别判断。
3)通过adb shell dumpsys cpuinfo | grep 获取的数据时一定时间内的,并非实时数据。

获取App的内存信息
adb shell dumpsys meminfo -s 获取的数据中TOTAL部分计算可以得出。其实好像top后的数据也是和这里的比较接近的。

获取App的网络流量数据
adb shell cat /proc//net/dev 通过里面的数据可以计算出发送和接收的网络数据字节或者包数。但是这个里面的数据是一直积累的,计算一段时间内,需要做一下处理。据说可以通过设置飞行模式清零,但我没有成功。

获取手机的温度和电量
adb shell dumpsys battery 里面temperature为温度,level为电量百分比。

获取App的FPS数据
dumpsys SurfaceFlinger --latency SurfaceView 因为我只做了游戏App的性能采集,因此只介绍游戏相关的,这条指令获取数据后可以计算出帧率。但仅限于Android 6及以下的设备。计算方式:Android性能测试之fps获取(https://blog.csdn.net/itfootball/article/details/43084527)

获取高系统版本的App的FPS数据
关于Android 6以上的系统设备,我花一段时间对dumpsys SurfaceFlinger进行分析,最后找到了一个较准确的计算方法,此方法目前在网上并没有发现有谁分享过, 具体如下 dumpsys SurfaceFlinger | grep flips 获取屏幕绘制队列。然后执行两次该命令,将获取的数据相减,并除以间隔时间,即可得到FPS值。我分别在Android 6, 7, 8, 9的设备上都进行了数据采集,相对是较准确的。但此方法没有看到理论支持,而且我也没有去看Android本身的源码,因此该方法仍需要在实践中检验。

四、工具开发

通过上面的内容,已经可以对一款游戏进行客户端性能采集,当然这些指标只能算通用性测试指标。并未涉及DC,三角面等更加深层的数据统计,针对这些深层的数据统计,我也仅使用过游戏引擎自带工具进行数据采集,例如Unity的profiler。说到工具开发首先就得选择合适的开发语言和界面设计。
个人开发工具的一些思路(才疏学浅T.T)

上一页12下一页


留言