引言
随着Android移动开发的需求越来越复杂,我们不可避免的遇到发布出去的apk体积越来越大的问题,目前超过10MB、20MB的apk已经是很常见的事情了,但是依然能够看到一些apk的体积控制的很小。apk体积增大源于:
- 新需求不断的提出
- 需要支持高分辨率的屏幕而加入了高分图片
- 依赖了更多的第三方库
- 本文将从我自己的经历项目中探讨如何有效减小apk的体积。减小Apk体积是一件很有用处的android优化手段,降低了用户需要下载的比特数,同时也降低了分发安装时失败的概率。
使用Progruard
Proguard是Android很早就使用的代码混淆工具,除了用于混淆代码提高安全性以外,他在代码编译的时候也会通过遍历代码的方式来发现没有被调用的代码,从而将其在打包成apk时剔除,最终一定程度上降低了apk的大小。但是Proguard使用时候是要注意的,因为代码中利用反射机制的地方会被Proguard工具破坏,所以要慎重的编写混淆例外文件,同时对于混淆后打包出来的apk要重新充分回归测试下。
使用Android Lint
Proguard提供了代码的缩减方式,而Lint对于res下面的资源进行了充分的优化,他会提供一份报告给你,从而通知你哪些资源没有被用到,显然剔除这些资源是可以减少apk体积的。这些资源包括res文件夹下所有的内容,比如图片、字串、尺寸等等。现在Android Lint已经集成到了Android Studio中,用法很简单。- 进入Android Studio的菜单中选择Analyze->Inspecting Code即可
- 分析完毕后在Inspection选项卡中会有一份详细的报告,找到Android Lint项目
- 拉到下面Unused resource这一栏打开,即是未被使用的资源列表,用户可以参照来手动删除资源
清理Assert文件夹
Assert文件夹经常会放置一些不被编译的资源,时间久了,里面可能一些文件或者资源已经不用了,然而这个文件夹也是会被打包到apk里面的。所以定期清理这个里面的内容也是减小apk体积的重要一步。用代码代替图片
开发的时候有些地方能用代码做出来的就尽量不用图片来渲染,这样子可以减少图片资源的数量从而减少体积,这里举几个例子。- 用shape代替背景图
- 用RotateDrawable代替仅仅是方向不同的“内容相同”的图片
- 用layer-list来制作多层图片从