最近公司测试工程师在对自己做的app进行全方位的测试,我们团队之前做的一个应用也在测试范围之类,反馈了一些问题如apk安装包大小低于30M,应用后台时cpu占用率不能超过1%, 应用前台、后台运行时内存占用也有规定(前台时 < 256M, 后台时非cached < 20M)。 这些问题应该在以后的开发过程中也会遇到,所以此处记录一下。
1、安装apk后检查占用的ROM
ROM的大小等于app安装包+apk.odex,odex一般在ota目录。
关于odex介绍如下:
ODEX是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个.odex文件单独存放,原APK中的classes.dex文件会保留。
使用adb指令找到apk安装路径:
adb shell pm list packages -f | grep "package_name"
- 这里说明一下我的电脑的window,没有grep指令,但是可以使用findstr指令取代。
由于我的测试机上面确实没有什么第三方的应用,所以就查找的settings的安装包。
找到apk的安装路径之后,进入到该路径,使用ls -all
就能看到apk的大小。在执行du -h
就能看到odex文件的大小,但是如果提示权限不足的话,那就只能在到ota目录下查看odex文件的大小了。进入ota目录: oat/arm/base.odex 或者 oat/arm64/base.odex 中使用du -h来查看base.odex的大小。
apk占用rom的大小= 安装包大小 + odex大小
apk占用rom的大小主要是安装包的大小,所以如果占用rom过多就需要精简安装包里面的资源,主要的资源涉及到drawable、mipmap、assert这三个文件夹。使用的图片、铃声、gif图等等资源的大小最好调整小一点,可以降低分辨率、复用多个资源等等方式。
2、应用后台时占用cpu
应用后台占用cpu指的是进入应用使用一段时间之后,点击home,然后再进入其他应用使用几分钟,这时再去查询之前使用的应用的cpu使用情况。
adb shell top -d 1 | grep "package_name"
这时就会列出来cpu的使用情况。每秒刷新一次。 其中看到的0%的那一列就是CPU的使用率。
cpu的使用率的优化主要考虑是否进程中还有一些操作还在处理。这个就需要分析代码了。
3、应用占用内存
应用占用内存分前台和后台,前台时占用内存应该会比较多,但是后台时,就应该基本上不会占用内存,除非有后台service在运行。
adb shell dumpsys meminfo
adb shell dumpsys meminfo命令是分析手机的ram情况,如果想要分析某个应用的情况直接在后面加上包名或者进程号。
其实adb shell dumpsys 还有很多功能,可以自行挖掘一下。除了可以看ram占用外还可以看cpu、电池、wifi等等信息。
这里列出一下选项:
名字 功能
account 显示accounts信息
activity 显示所有的activities的信息
cpuinfo 显示CPU信息
window 显示键盘,窗口和它们的关系
wifi 显示wifi信息
batteryinfo $package_name 电量信息及CPU 使用时长
package packagename 获取安装包信息
usagestats 每个界面启动的时间
statusbar 显示状态栏相关的信息
meminfo 内存信息(meminfo $package_name or $pid 使用程序的包名或者进程id显示内存信息)
diskstats 磁盘相关信息
battery 电池信息
alarm 显示Alarm信息
内存的分析就比较多了,可以看看前人的经验。
后续如果有更深入的分析再更新。