@watman 正文中写了所有设计框架和思路。shell 脚本获取数据 +python 处理 csv 为目标 json+highcharts 模板,用 node-webkit 框架展示
Sorry,昨天忙着整理思路,写成了 word。贴过来后,调整了下内容就没排版。今天重新排版了下
建议监控获取数据:cpu,内存,显示的 activity,date 时间。这样分析的时候就可以知道每个获取数据的时刻界面显示状态,时间也可以和 log 的时间对应以便分析
一般都是 Pss 为准,我采用的评估方式都是监控 + 用例(脚本或 monkey),测试整个系统就是 Pss 峰值降序排列,和极值差(最大值 - 最小值)降序排列。对于系统优化思路是:Pss 峰值越高,可优化性越大;极值差越大内存泄露的可能性越大(当然要排除正常逻辑缓存数据,像在线视频类的 app)
对于 app 评估,对比下竞品的 Pss 占用情况,给极值差定个预警值,超过预警值就要分析下原因,以便筛查内存泄露。
5、dumpsys SurfaceFlinger 可以直接判断显示内容的情况,你使用 dumpsys SurfaceFlinger|grep "|....|"取几次数据就能清楚,这部分数据是有用来做判定的价值的
使用 shell 写脚本就是要很清楚信息来源 proc 伪文件系统下的可用信息,dumpsys 可获取到的状态,busybox 可已被利用的命令,uiautomator dump 获取 ui 布局,uiautomator events 获取 ui 事件 log 等;文本操作处理灵活使用 awk,grep,sed;明晰权限对执行命令的影响;控制操作的方式:input,sendevent,am,svc 控制网络开关等。剩下的就是如何组织逻辑,容错异常,设定输入格式将结果信息格式化输出等整体设计的事项。
我自己也已经使用 shell 分析 uiautomator dump 写脚本 1 年多了,几点经验:
1、uiautomator dump 在不同权限下有读写限制,需要保证可以正常写入文件,写文件的位置可以自行调整。
如:uiautomator dump /sdcard/check.xml
2、安卓 5.0 有 dump 出的文本中文乱码问题,需要替换 uiautomator.jar 或更新 uiautomator 相关代码
3、解析 xml,建议使用<node 前加回车换行的方式,一目了然,grep 特征字符锚定行之后 awk 按” 间隔选取很容易判断
注意 echo 变量需要加引号否则会没有换行符导致 grep 特征字符锚定行无效
uiautomator dump /sdcard/check.xml && busybox sed -i 's/<node/\n<node/g' /sdcard/check.xml
4、uiautomator dump 有失败的问题如动态界面抓取,需要容错此问题,每次执行前删除/sdcard/check.xml,判定文件正常生成后继续
5、由于 uiautomator dump 效率问题,在非精确判定布局和文本的情况下,灵活使用 dumpsys SurfaceFlinger,dumpsys window 判定显示状态。
以下命令配合 awk 判断显示界面情况
dumpsys SurfaceFlinger|grep "|....|"
以下命令配合 grep 判断是否存在
dumpsys window p| grep -c "特征字符"
代码实现细节就不写那么多了,思路就是如此。