众所周知,apk的性能决定了用户的体验是否完美。只有得到用户的认可,我们的产品才能够生存下去。从而有了apk优化一说。而瘦身就是其中之一。
瘦身是指在不减少App功能的前提下,通过一些技巧将打包出来的apk体的体积尽可能减少。这样做的好处有几个:加快用户下载速度,节省用户下载流量,提升用户下载体验。
因为如果不进行瘦身,默认打包的apk会包含所有未曾用到过的源代码,资源文件等,极大地增加了apk文件的体积。
App瘦身的常用技巧
第一种:配置gradle文件,开启minifyEnabled,作用是启用混淆压缩模式,会过滤掉整个项目中未使用到的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'
}
}
第二种:配置gradle文件,开启shrinkResources,作用是将res目录下未使用到的图片文件进行特殊处理,其具体做法是将未使用到的图片全部变成1x1像素的小图,从而减少res目录的大小。
具体做法如下:
shrinkResources {
//启用res资源过滤,会将项目中未使用到的图片变成1x1的小图,从而减少体积
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
第三种:配置gradle文件,指定resConfigs,作用是指定打包时编译的语言包类型,未指定的其他语言包,将不会打包到apk文件中,从而减少apk体积的大小。
具体做法如下:
defaultConfig {
applicationId "com.example.hh.appthin"
minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0"
//配置打包时编译的语言类型,默认会编译value目录,此处再增加一个中文类型
resConfigs("zh")
}
第四种:采用三方工具(如tinypng)来进一步压缩项目中的所有png图片,从而进一步减小apk体积。
首先,打开tinypng网站,将项目中的png图片拖拽网页中,自动进行压缩;
然后,下载所有经过压缩的图片,替换项目中对应的png图片;
总结:该种方式能够极大的减小图片的体积,基本上能减小50%左右,效果非常显著,强烈建议掌握。
第五种:采用webp格式的图片替换png和jpg格式的图片
webp概念:
WebP格式,谷歌(google)开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。Facebook Ebay等知名网站已经开始测试并使用WebP格式,国内的京东,淘宝客户端都在使用。webp格式是未来图片格式的趋势。
对于服务器来说,webp格式可以说是必用的格式。对于客户端来说,可以将比较大的png图片替换为webp格式,从而减少apk的体积。
如何将得到webp格式的图片?
有2种方式,可以选择让美工在作图的时候直接做成webp格式;也可以选择使用一些webp格式转换工具对当前已有的png图片进行转换。
如何将webp格式的图片应用到项目中?
直接将得到的webp格式图片替换项目中的png图片即可。
webp使用注意事项
Android4.0以及以上才支持webp格式,但是这并没有影响,因为我们开发时的minSDK就是14了,所以不用关心。
第六种:比较hack的方式,删除已签名的apk文件中未使用的图片资源(主要是support包中自带的图片),然后使用证书进行重新打包。操作步骤如下:
首先,使用压缩软件打开apk文件,然后删除那些没有使用到的文件,主要是support包中自带的图片
然后进行安装,如果安装的时候报错,则删除apk中META-INF目录,再使用签名工具对apk进行重新签名即可
注意:此方法有风险,因为我们删除了support包中的图片,而这些图片大多是被support中的类使用的,比如ActionBar,所以有
可能报错找不到对应的图片;如果采用了该方法,就需要对app进行全面测试发现没有问题后,才能让app上线。
现在对应用瘦身技巧总结,并按照重点技巧进行分类和排序,那么分类总结如下:
图片压缩:采用三方工具压缩png图片,或者使用webp格式图片替换png图片
配置gradle文件:主要是开启minifyEnabled和shrinkResources,并指定编译的语音包resConfigs
删除apk文件中未使用的图片,主要是support包中的图片文件