每个版本专项测试都需要记录 apk 的总大小值,然后对比每个版本的包大小总值,这个总大小对于开发并没有什么实际价值,因为不够细化 apk 中各种资源的大小.
比如 dex、so、图片资源各自占比、是否有重复资源、是否有图片未压缩等.
如果能每个版本检查出上述问题并提出优化建议,那么在持续集成中价值就比较大.
Android 开发编写的是.java 代码,Android 在运行时用的是 dalvik 虚拟机,而 dalvik 虚拟机只能运行.dex 文件.
dex 文件的加载是通过 DexClassLoader、PathClassLoader 等类来完成的.
通过 Android Studio 分析下 dex 文件,共有 6 个 dex 文件.
出现多个 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 工具的原理和分析过程
请参考: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 两个文件.
把上述执行 jar 包的操作封装成 python 脚本.
优化下报告,因为原生的报告数据很多并且描述都是英文的.
开发同学看到这些并不能直观的看出问题.所以做了优化报告.
报告生成到本地后,把报告上传给后端保存,在测试平台展示并且生成对比图.
包检查是一种低频率测试,每天执行一次即可.
当然重复代码是可以从代码扫描的角度发现,减少重复代码也可以达到包瘦身的效果.
资源文件没有被真正引用到
资源目录下有两个一样的文件,根据对比文件 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