现在APK动不动就是几十兆,当用户连接到2G和3G网络,或者按流量收费的设备是多么的浪费,这篇文章介绍了如何对APK进行瘦身,帮助更多用户毫不犹顾忌地下载你们的APP。
以我的个人APP【 微言 】实践,未做任何处理,APK大小 11712 KB= 11.43 MB。
开启minifyEnabled混淆代码
在app/build.gradle打开minifyEnabled:
|
在app/proguard-rules.pro编写混淆规则,根据自己项目依赖的库一一混淆,这里就不提供具体混淆代码了。
经过混淆,APK大小 10906 KB,效果很明显,一下子瘦了0.78 MB。
开启shrinkResources去除无用资源
在app/build.gradle打开shrinkResources:
|
shrinkResources依赖于minifyEnabled,必须和minifyEnabled一起用,就是打开shrinkResources也必须打开minifyEnabled。
APK大小 10903 KB。
删除未使用到xml和图片
如何知道哪些xml和图片未被使用到?使用Android Studio的Lint,步骤:点击菜单栏 Analyze -> Run Inspection by Name -> unused resources -> Moudule ‘app’ -> OK,这样会搜出来哪些未被使用到未使用到xml和图片,如下:
经过删除,APK大小 10891 KB。
删除未使用到代码
同样使用Android Studio的Lint,步骤:点击菜单栏 Analyze -> Run Inspection by Name -> unused declaration -> Moudule ‘app’ -> OK
经过一番清理,APK大小 10880 KB,才瘦了11KB,我以为能瘦很多,不过,平时必须保持良好的编码习惯,哪些没有使用到的代码还是删删掉吧,不要想着以后还会用到。
重复操作上一步和这一步,会有意外的发现哦。
png图片格式转成jpg
将一些大图的格式转成jpg格式,将会有效减小图片的体积,我的APP大图不是很多。
更改格式后,APK大小 10762 KB。
使用vector
微言是我很早就已经做得app,一开始图标都是图片,且每个drawable都有相应尺寸的图标,占了不少大小,后来部分用vector代替了图片。注意一点,Button在xml里设置app:srcCompat居然无效,只能在代码里设置:
|
APK大小 10754 KB。
使用shape作为背景
很多点击效果可能会使用到图片,可以换成shape是实现,我查看了下,微言APP都是shape实现的,Good。
使用TinyPng
如果对png图片格式转成jpg,减小效果还不满意,直接使用TinyPng智能有损压缩技术,网址:https://tinypng.com/ ,压缩效果:
对于图片资源很多的APP,APK瘦身效果不要太好。
APK大小 10341 KB。
配置resConfigs
如果APP支持中文,可以配置resConfigs,只支持中文
|
APK大小 10243 KB。
使用微信Android资源混淆工具
微信AndResGuard是一个帮助你缩小APK大小的工具,详情:Android资源混淆工具使用说明。
使用方法:
Project/build.gradle
|
app/build.gradle
|
AndResGuard打包命令行:gradlew resguardRelease,最终的混淆APK会生成在{App}/build/output/apk/AndResGuard目录下。
APK大小 10035 KB= 9.79 MB。
结尾
最终APK瘦身 11.43 - 9.79 = 1.63 MB,瘦身效果不是很明显,说明:
1、我的这个APP毕竟不是商业项目,本身就不大;
2、我的编码习惯可以,没有多少冗余代码和无用资源,哈哈。
大家可以将你们的APK按照这些方法过一遍,看能瘦多少。
瘦身还有其他方法,生命不息,折腾不止。
参考
官方文档Reduce APK Size
https://developer.android.google.cn/topic/performance/reduce-apk-size.html
Android APP终极瘦身指南
http://jayfeng.com/2016/03/01/Android-APP%E7%BB%88%E6%9E%81%E7%98%A6%E8%BA%AB%E6%8C%87%E5%8D%97/
AndResGuard资源混淆
http://www.jianshu.com/p/7ffea26c9fd8