一、背景
在满足产品、UI要求的前提下,尽量减少安装包体积。
以customer插件为例:
插件大小为5MB, 其中1MB是dex,而bkbase占了dex的580KB;
3.1MB是图片。 减少res目录体积效果会更明显。
二、方法
1、删除冗余代码、资源文件, 可使用lint扫描; 安卓端在编译release包时设置shrinkResources为true, 即不会打包冗余资源到输出物;
2、代码重构,能复用的尽量复用;即减少类、方法、参数数量;
3、预置资源(字符串、图片)尽量复用, lint可以扫描出相同、相似图片, 保留一个就可以了;
4、非必须预置资源文件(例如图片)使用其它方式实现(例如shape),并用api下发的资源刷新;
5、占位编译依赖库;
6、混淆;
Java知识点:使用@IntDef,@StringDef替换枚举, 原理enum生成的.class占1KB左右。
三、待优化项
PS: 文件大小以release包为准。
删除重复图片、代码、冗余资源、无用import,以customer为例:
待讨论: shape.xml在打包时占300~400字节, 是否必要改用代码生成GradientDrawble???
替换预置图片(Android/iOS):
顶部蓝色背景图可以先用shape实现, 然后用url下载图片后刷新。
瘦身还有个神兵利器:
Matrix-ApkChecker 是微信开源的一个apk分析工具,
功能:具有分析apk组成,冗余文件,未压缩文件,并提出优化建议等功能,并将各项数据可视化输出,可定制输出格式。
集成方式为:jar方式集成到到打包机上即可。但是我们的app使用插件话所以可能需要定制一下扫描路径去扫描每个插件。
效果:帮助量化Apk瘦身,并检测apk冗余成分
使用文档:https://github.com/Tencent/matrix/wiki/Matrix-ApkChecker#matrix-apkchecker-的使用
相关文章:https://mp.weixin.qq.com/s/tP3dtK330oHW8QBUwGUDtA
比lint好用, 剩下的就是体力活儿了。