一、APP瘦身的概念
APP瘦身指定是在不减少APP功能的前提下,通过一些技巧将打包出来的APK的体积尽可能的减少。这样做的好处有这么几个:加快用户的下载速度,节省用户下载流量,提升用户的下载体验。
二、APP瘦身的技巧
1、配置gradle文件,开启minifyEnable,作用是开启混淆压缩模式,会过滤掉整个项目中未使用的jar和class文件,对代码进行混淆,从而减少dex文件的大小。具体做法是:
buildTypes { //增加构建类型 releaseMinifyEnabled { //开启dex字节码压缩,舍去未使用的jar和class文件 minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } //默认release构建类型 release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
2、配置gradle文件,开启shrinkResources,作用是将res,目录下未使用的图片文件进行特殊处理,其具体做法是将未使用的图片全部变成1×1像素的小图,从而减少res目录的大小。具体做法是:
shrinkResources { //启用res资源过滤,会将项目中未使用到的图片变成1x1的小图,从而减少体积 shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' }
3、配置gradle文件,指定resConfigs,作用是指定打包时编译的语言包类型,未指定的其他语言包,将不会打包的apk文件中,从而减少apk体积的大小。具体做法是:
defaultConfig { applicationId "com.example.lxj.appthin" minSdkVersion 14 targetSdkVersion 24 versionCode 1 versionName "1.0" //配置打包时编译的语言类型,默认会编译value目录,此处再增加一个中文类型 resConfigs("zh") }
4、采用第三方工具(如tinypng)来进一步压缩项目中所有png图片,从而进一步减少apk的体积。具体做法:
① 打开tinypng碗盏,将项目中的png图片拖拽到网页中,自动进行压缩;
② 下载所有经过压缩的图片,替换项目中对应的png图片;
③ 该方式可以很大程度上减少图片的体积,可达50%左右,效果非常显著。
5、采用webP格式的图片替换调png和jpg格式的图片
webP的概念:
webP是谷歌开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并且能节省大量的服务器宽带资源和数据空间。国内的淘宝、京东客户端都在使用,webP是未来图片格式的趋势。对于服务器来说,webP格式可以说是必用的格式,对于客户端来说,可以将比较大的png图片替换成webP格式的,从而减少apk的体积。
如何得到webP格式的图片:
两种方式:一种是直接让美工在作图时直接做成webP格式,还有一种就是使用转换工具,将当前的png图片转换成webP图片。
如何将webP格式的图片应用到项目中:
直接将得到的webP格式的图片替换项目中的png图片即可。
webP的使用注意事项:
Android4.0及以上才支持webP格式的图片!!!
6、比较hack的方式,删除已签名的apk文件中未使用的图片资源(主要是support包中自带的图片),然后使用证书进行重新打包,操作步骤如下:
① 首先使用压缩软件打开apk文件,删除那些没用用到的文件,主要是support包中自带的文件
② 然后进行安装,如果安装的时候报错,则删除apk中META_INF目录,在使用签名工具对apk进行重新签名即可
注意:此方法有风险,因为我们删除了support包中的图片,而这些图片大多是被support包中的类锁使用的,比如ActionBar,所以有可能报错找不到资源文件,如果采用了这种方法,就需要对app进行全面测试发现没有问题之后,才能让app上线。
总结如下:
对apk瘦身的操作主要有这么两类:
第一类是对图片进行压缩,主要是采用了第三方的工具比如说tinypng或者是将图片格式转换成为webP格式的图片;
第二类是配置gradle文件,主要是开启了minifyEnabled和shrinkResources,并指定编译的语言包resConfigs;
第三类是删除apk文件中未使用的图片,主要是support包中的图片文件。