每个版本专项测试都需要记录apk的总大小值,然后对比每个版本的包大小总值,这个总大小对于开发并没有什么实际价值,因为不够细化apk中各种资源的大小.
比如dex、so、图片资源各自占比、是否有重复资源、是否有图片未压缩等.
如果能每个版本检查出上述问题并提出优化建议,那么在持续集成中价值就比较大.
打包过程.png
Android开发编写的是.java代码,Android在运行时用的是dalvik虚拟机,而dalvik虚拟机只能运行.dex文件.
dex文件的加载是通过DexClassLoader、PathClassLoader等类来完成的.
通过Android Studio分析下dex文件,共有6个dex文件.
image
出现多个dex文件,是因为做了dex分包.每个dex要求方法数不能超过65536上限.
.so文件是NDK编译出来的,项目中使用RenderScript支持库,OpenCV,Unity,android-gif-drawable,SQLCipher等,已经在生成的APK文件中包含.so文件了.
这里提到了NDK工具,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.
.png是常见的资源文件,在Android项目中路径是res文件路径下.
现在多数app的是混合模式开发,通常会内置一些常用js文件,使用的时候从本地使用js文件,减少网络请求js文件并且提高web页面的响应时间.
.xml文件是配置icon展示的颜色和大小等参数.
有些app在首页安装会播放一段介绍视频,会内置一份.mp4文件到app中.
使用微信最近开源的项目Matrix-ApkChecker工具,以下是ApkChecker工具的原理和分析过程
image
image
请参考:https://github.com/Tencent/matrix/wiki/Matrix-ApkChecker#matrix-apkchecker-的使用
在git上下载matrix-apk-canary-0.4.10.jar.
简单使用命令如下:
java -jar matrix-apk-canary-0.4.10.jar --apk apk路径
使用配置文件命令如下:
java -jar matrix-apk-canary-0.4.10.jar -apk apk路径 --config 配置文件路径
配置文件太长就不帖子了,基本上和官方教程是一样的.
执行完命令之后,会生成html和json两个文件.
image
把上述执行jar包的操作封装成python脚本.
优化下报告,因为原生的报告数据很多并且描述都是英文的. 开发同学看到这些并不能直观的看出问题.所以做了优化报告.
image
报告生成到本地后,把报告上传给后端保存,在测试平台展示并且生成对比图.
image
包检查是一种低频率测试,每天执行一次即可.
当然重复代码是可以从代码扫描的角度发现,减少重复代码也可以达到包瘦身的效果.
资源文件没有被真正引用到
资源目录下有两个一样的文件,根据对比文件md5
webp格式比png、jpg体积小
已经把Matrix-ApkChecker加入到monkey测试脚本中
项目地址:https://github.com/xinxi1990/maxauto
cd checker
python run.py apk_path mail_list(多个人逗号分隔)
原理介绍 https://mp.weixin.qq.com/s/tP3dtK330oHW8QBUwGUDtA
github地址 https://github.com/Tencent/matrix/wiki/Matrix-ApkChecker
Android中的dex、apk、ClassLoader详解 https://blog.csdn.net/u014606081/article/details/71555405
Android NDK开发(一) 入门 https://www.jianshu.com/p/0261e6cceb3e