现在项目APK 包太大,都已经达到50+M了,不仅仅下载慢,而且作为开发者编译,测试都要花费很多时间。因此想,有没有什么方法能优化下APK。
从上而下的分析思路
- 插件化,需要的时候时候再去下载,可以极大的减少APK大小。但是有一定技术难度,成熟的方案有,360 RePlugin,VirtualAPK ,Atlas等
- 模块化,业务分模块开发,并且提供noop包,保证能编译,但是无太多代码。
- 组件化,公用的功能抽取出内聚的组件模块,尽量复用。
从下而上的分析思路。
大家耳熟能详的方法就有很多,比如开启混淆,压缩图片,使用 SVG,去除无用库,使用 AndResGuard 之类的。大概分类了下:
优化图片大小
1.使用 tinyPNG 压缩图片大小
2.有些图片换成 webP 格式,如背景图
3.icon 图标仅保留一套,使用时将 ImageView 大小限制死。仅保留极个别不同分辨率的图标。
- 部分icon 使用 svg 代替(少量)
优化布局
1.优化层级,减少布局嵌套
2.一个界面一个界面的消除过渡绘制
3.多使用 include 标签,重用布局
4.不必要的布局使用 ViewStub 延迟加载(用的很少)
5.将可复用资源抽取到对应的 res 文件中,如字符串,样式等
优化代码
1.实体类去除没用到属性,并将属性设为 public ,去除 get / set 方法
2.减少内部嵌套的实体类,尤其像 GsonFormat 这样的工具生成的实体类
3.能服用的尽量复用。
- 剔除了一部分我自己常用的打包好的工具类中一些没调到的方法。
优化三方库的使用
- Glide 还是 Picaso 纠结了好一阵子。Picaso 要小很多
2.推送,统计,三方登录,微信支付,地图,这个没法删。但是优化了一下 so 适配CPU的数量。
编译优化
- 开启混淆
- 代码压缩,mini
其他优化
- 部分功能,网页实现
- 地图可用JS代替原生实现