上周接到了个需求-去给当前的app瘦身下。刚好不想做业务方面的需求,然后就抽了那么几天做了下调研,做个小总结。
目前的项目apk大小在70m到80m之间,不要问我为什么这么大,你来了就知道了!!!既然要给项目瘦身,怎么着也得了解下已经采用的的方法,顺便也增加下了解好了(无了解)
目前项目采取的压缩方法,直接上一个代码:
//开启proguard混淆
minifyEnabled true
//Zipalign优化
zipAlignEnabled true
proguardFiles '***.pro'
//去除无用的res资源
shrinkResources true
没有太多秘密,才有Proguard进行混淆,Proguard不仅仅是混淆,还可以压缩、优化等功能。Proguard文件的配置主要在***.pro文件中,编写***.pro文件不难这里不介绍。
弱弱问句,你们知道敏捷开发吗?
是的,我们部门就很类似那种风格。好了,回到正题,基于对目前项目的分析,采取的瘦身方法主要有如下三点以及后期排期的一点:
1)、删除目前无用的模块。(重要)
2)、删除无用so
3)、删除无用的res以及对drawable文件压缩(可以稍微减下那么几m)
后期排期:
4)、插件化(没实战过不做介绍)
第一点之所以说重要,基于当前部门的开发风格相关(敏捷开发:疯狂的做各种需求,有的没的不一定会到用户的那种)造成目前项目存在大量的无用模块,我采取的策略是删除无用的超大模块,排期就那么几天没办法做到精确的各个模块。(当然也可以释放大量的无用res资源)
so文件不说还是蛮客观的。
无用的res这里包括两点:第一点是删除当前项目中没有无用的资源以及被无用大模块占用的资源,第二点是对当前图片进行压缩。
具体的实现:
第一点和第二点和每个具体项目相关不展开
稍微详细讲下删除无用res凑合下字数表示自己也是在做笔记好了,这里不以androidStudio自带的lint为例。
比较推荐Lint Cleaner Plugin + android-resource-remover
使用Lint Cleaner Plugin可以在项目目录下生成两个文档lint-results.xml以及lint-results.html,如果时间充裕完全可以打开lint-results.hmlt,我相信你会被小小感动一下下,里面除了记录了目前项目哪些res是无用res,还可以罗列出目前哪些地方可以被优化的地方,比方哪些地方布局可以用merge、哪些地方hashmap可以被sparseArray替代、哪些地方可能存在内存泄漏等,(还是蛮推荐看下的)
android-resource-remover --xml build/outputs/lint-results.xml在项目的AndroidManifest.xml文件所在的路径下执行
具体使用步骤见附录链接
图片的压缩,目前项目图片格式主要存在三种格式webp、png、.9.png。目前webp在项目中使用存在少量,这边压缩主要针对png
采用TinyPng
附:
Lint Cleaner Plugin使用:
https://github.com/xiepengchong/lint-cleaner-plugin
android-resource-remover使用:
https://github.com/KeepSafe/android-resource-remover
TinyPng网址: