现在很多公司都尽量缩小发布apk的大小, 目的是提高用户体验。 但是像滴滴这样霸气的公司不怕你不用, 所以在这方面就没做优化, 现在的滴滴出行apk已经59M了, 就是这么屌! 显然是告诉用户在wifi环境里下载。 但大多数应用不能这样干, 因为没有像滴滴那样有垄断的地位。 言归正传, 减少apk体积主要分如下5个方面:
1、 apk插件化和动态加载, 将代码和资源分成多个apk包, 用户从应用市场下载的可能只是壳。 当用户点击某个按钮时再去下载对应的apk资源并动态加载, 典型案例就是支付宝。 而且插件化也是安卓面试中很常见的问题, 相关技术可参见博客: http://weishu.me/
2、 老生长谈的优化数据结构,重构代码(用android studio的refactor菜单)等, 即减少java文件数和方法数(删除冗余代码)。 其实这样节省不了多少空间, .class文件很小。
3、 删除冗余的三方库, 并尽量换成体积小的三方库, 前提是综合判断性能、功能和空间, 也不能一味的追求体积小的三方库。 例如几乎每个互联网app都用到了百度地图或高德地图sdk, 高德地图sdk体积比较小很多, 区别主要是百度地图sdk有一堆的so文件, 而高德地图sdk不需要集成so, 所有建议用高德地图(占用空间更小)。
4、 减少res目录下资源文件的大小(主要是图片), 可以使用android studio提供的插件lintCleaner删除冗余的布局和图片。
5、 使用适当的图片压缩格式, 当然能用xml搞定的就不用其它格式的, 推荐优先级VectorDrawable->WebP->png->jpeg。图片压缩格式可见这个博文: http://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650236506&idx=1&sn=50e3f4d5bf9ca7f098482e680c1a577f&scene=23&srcid=0721ojbape0BVgFjpbbKy3Uh#rd
综上, 插件化实现起来比较麻烦, 效果也最好; 其它4个方法主要是为了减少res和lib目录下的空间。