1. 背景
在实际开发过程中,随着功能的不断迭代, 安装包越来越大,用户安装成本显著增加,直接影响安装转化率,因此启动包瘦身计划势在必行。在本轮瘦身中,自己也参与部分,对于优化的思路和方法,做了一点总结。下面以开源的SmartRefreshLayout来进行分析总结,加深对按照包大小优化的理解和记忆。
2. 整体分析
测试包原始大小为11.1M,包的结构用Analyze APK...构成如下:
这些目录大家也都知道,不过还是按照占比大小依次说明一下。
2.1 res
这个目录主要存放layout、strings、drawable等资源文件, 在这个文件中的所有文件都会生成对应的ID映射到Android的R文件中。
2.2 lib
该目录主要用来存放程序依赖的c/c++编写的native库文件, 主要包含4种架构类型,分别是ARM,ARM-v7a,MIPS, X86,系统根据cpu类型来加载对应的目录。
2.3 classes.dex
该目录主要存储JAVA可执行文件,字节码都保存在Java文件编译后的class文件中,一般情况下打包时通过AndroidSDK中的dx工具可以对class文件进行合并重组、优化以达到减少体积,缩短运行的目的。
2.4 resources.arsc
主要用于存储资源及ID的映射关系, 用ID来快速查找资源。
2.5 META_INF
应用的签名信息,签名信息可以用来验证APK文件的完整性。
2.6 AndroidManifest.xml
整个应用的描述信息,主要有权限说明、Android四大组件信息等, 程序打包时,会对AndroidManifest.xml进行简单编译, 便于Android系统识别, 编译后的格式为AXML。
2.7 assets
可以存放任何类型文件, 该文件夹不参与编译,一般放配置文件、图片等。
3. 优化思路
针对APK首先进行全局优化,优先进行无效资源清理、无用模块下线、 功能模块远程化、混淆等。再针对APK包结构的组成,有针对性的进行细节优化。
4. 全局整体优化
1. 混淆
这也是外发正式版本的基础功能,混淆主要包含压缩、 优化和混淆, 在这里我们简单看下混淆后我们取得的收益。
混淆后包的大小为9.8M,收益1.3M,包大小减少12%
再进行资源压缩后的大小为9.5M, 收益0.3M。所以进行混淆压缩后包大小可以减少14.4%.
混淆可配置化选项比较多,具体的压缩、优化原理 后续另开文章进行详细说明。
2. 无用模块下线
需要梳理那些模块是已经下线或者不在使用的,做及时下线处理。
3. 无用及冗余代码清理
可以用Android Lint工具进行无用资源、无效索引删除,在Analyze中Run Inspection...检索unused resources,进行清理。
这么小的模块就有这么多的冗余资源,虽然资源都比较小,对包大小影响不大,但这些资源是不必要存在的。
4. 插件化
如果模块实在无法减少,功能又不能下线,可以针对优先级低的模块,进行延迟在线下载。
5. 针对性细节优化
通过包结构分析,我们可以看到res及lib占了很大的比重,res中有多套资源,lib有包含了多cpu架构支持,这都是可以优化点的。
1. 资源文件最少化
从图片尺寸上看,虽然这个demo有多个屏幕尺寸文件夹,但里面没有重复的多套图片资源,但具体文件夹数量可以进行精简,mipmap及drawable除了针对launcher外,其他没有区别,可以考虑合并精简。
2. 图片尺寸压缩
常用的图片尺寸压缩工具有tinypng、Compressor.io等,我们项目中采用tinypng,它大概思路是针对24bit图转化为8bit或者更小, 经验得出对图片进行1-2次压缩,并不影响图片,我们demo中文件进行2次压缩后,对比下瘦身效果。
包大小9.5M降到7.9M,这仅仅是图片压缩带来的减少,减少1.6M,占比17%, 对layout精简,对相似图片进行合并,还有继续优化的空间。
3. CPU架构库优化
现在mips及x86的设备很少,并且大多数设备都是支持arm的,因此可以去处mips及x86的cpu架构包,针对arm-v7的so,如果没有使用neon指令集,也可以去处arm-v7包的支持,只使用arm包即可。
只保留一个CPU架构时,包大小从7.9降到5.3M,再次降了2.6M。
6. 总结
该测试包从最初的11.1M经过初步的搜身, 缩减到5.3M,优化了52%, 优化效果非常明显。这里只是进行了基础瘦身,还是有进一步缩减的空间的。
包大小要严格控制,需要有一些工具或者方法,方便监控每个版本的这些指标,这不仅仅关系到用户下载转化率,无用的功能及代码的及时下线回收,很大程度可以避免无谓的系统及人力开销。
7. 参考资料
https://developer.android.com/topic/performance/reduce-apk-size.html
https://www.jianshu.com/p/158aa484da13
https://www.jianshu.com/p/f7dc272b3469
网友评论