公司的需求越来越多,app功能越来越炫,apk瘦身也就势在必行。参考他人的经验,经过实践之后,发现以下的方法还是很有效果的~
一、瘦身assets文件
查看该文件夹有没有被丢弃不用的文件
二、瘦身res资源
1、瘦身drawable资源
①对于ldpi,系统会自动的将hdpi的图片缩放到达到目的,所以不需要
②xxxhdpi,针对2k屏幕的,目前还没有普及开,考虑下是否需要
③引入的第三方包中可能也引用了资源图片,但是其中的某些我们可能是不想要的,剔除他们,可以配置build.gradle。defaultConfig提供了resConfig这个flavor来指定打包出只打包某些资源,比如字串、图片等等
defaultConfig {
// ...
resConfigs "en", "de", "fr", "it"
resConfigs "hdpi", "xhdpi", "xxhdpi"
}
④图片压缩,可以使用pngquant工具,使用很方便,支持.9png。网址:https://pngquant.org/
打开网页,下拉会看到Download–>Command-line 然后根据操作系统下载版本,例如 Binary for Windows (v2.5.2)。下载下来之后解压,进入到pngquant目录下,把需要压缩的图片文件夹如drawable-xxhdpi,copy到该目录下。然后进入控制台命令进入该目录下执行.\pngquant 256 –force –ext .png .\drawable-xxhdpi*.png。OK结束了。可以对比文件夹操作前后的大小了。效果还是很明显的。
解释下其中几个参数:
–ext .png 这个是因为默认它会将解压缩后的Png文件重命名加后缀,这个参数即将重命名后加了一个空的字符的后缀,即等于不重命名了
–force 不重命名后等于要覆盖原来的文件了,这里即强制覆盖原来的文件
⑤ 巧用代码代替图片。如自定义带圆角的button图片等等
2、瘦身layout资源
将布局中重复使用的控件的样式能提取的提取出来共用,不仅减少代码量还利于维护。例如提取布局的公共标题栏,控件中相同的属性配置等等
三、瘦身 lib资源
so文件的瘦身
so文件体积大,不加控制,都会打包到的apk,精简过程可以删掉x86和x86_64的so,他们只是用来支持虚拟机的,可以通过配置gradle来制定只打包某些so
defaultConfig {
... ...
ndk {
//设置支持的SO库架构
abiFilters 'arm64-v8a', 'armeabi' //, 'x86', , 'x86_64', 'arm64-v8a'
}
}
四、 瘦身代码
根据Android Lint(AndroidStudio),Problems(Eclipse)的提示,把未使用的代码手动删除掉。
五、重新打包Jar包
引入大量的第三方开发库并不一定全要的。如果在build.gradle里面加一句:
dependencies {
compile '***'
}