随着业务需求的扩展,apk size会不断增加,size太大会影响用户下载和升级的意愿,压缩size是每个大型app必须的工作。
首先来看一下apk的构成:
主要包含资源和代码,那压缩size就要从这2方面入手。
资源方面
1. 删除无用资源
通过lint或resource shinking等删除无用资源
2. 压缩图片
1)无透明度的png转成jpg
2)通过tingpng, tingjpg等进行有损压缩,或通过ImageOptim进行无损压缩
3)在不影响质量的提前下将大图转换成webp
3. 压缩动画
压缩loading等gif动画,及其它较大的资源,如mp3
4. 动态加载
对动态表情等特定业务场景才使用的动画等资源做动态加载,app启动后在线下载,不随apk发包。
5. 使用微信资源压缩方案
方案见 https://github.com/shwenzhang/AndResGuard
代码方面
1. 开启proguard
proguard不仅能够混淆,而且能够优化代码,可以大大减小dex文件的大小。
但需要对被反射引用的类需要做好keep
2. 动态加载
对ocr(身份证识别)等较大的库做动态加载,app启动后在线下载,不随apk发包。
3. 插件化
将相对独立的业务做成插件,app启动后在线下载,不随apk发包。
5. Facebook字节码优化方案redex
方案见 https://github.com/facebook/redex
其它方面
Android标准打包过程未对so库,arsc等文件进行压缩,打包时可以对这些资源进行压缩,可以压缩好几M的大小。
实践以上方案可大大减小apk size,实测45M降到30M以下~~~