Android apk包瘦身主要是从三个方面出发:
1.Java代码方面
-
开启minifyEnable
众所周知,在build.gradle中配置minifyEnable可以起到混淆代码的作用,但是它的作用其实不光光是混淆代码,他还能起到压缩优化的作用,开启后可以找出代码中没有用到的代码,这些代码将不会生成在apk中,另外混淆的效果是使用简短的字母替代原来的类名属性名等,一定程度上也可以减小代码体积。 -
对于项目中开源库的选择要慎重
对于开源库中我们只选择用相关功能的库,某一些开源库可以提供很多功能,例如某些orc识别SDK坑我们只会用到银行卡识别功能,此时身份证识别功能我们就可以选择放弃,我们可以选择它的轻量级库,而不用一股脑的都选择,这样也可以起到瘦身的作用。
2.资源文件瘦身
-
开启shrinkResources功能
shrinkResources标识是否去除无用的resource文件,它需要配合minifyEnable使用,同样存在反射机制引用的问题。 -
图片资源
对于app中的图片文件,项目中会有mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi这几个文件夹,这种是为了兼容过去的各种图片文件等,这样就会没一个文件夹都有一套图,带来的问题也就是导致apk文件变大,在高分辨率智能手机盛行的今天,我们完全可以采用只选择一套图片放在xxxhdpi文件夹的这种方式。
不涉及透明图层的图片可以尽量在保证不失真的情况下,更多的选择.jpg类型代替.png类型。
对于某些大图,可以在能替换的情况下,用较小的图片代替之。
tinypng插件同样也可以解决这类问题,我们可以把图片放在该网站中压缩一遍,该插件的压缩率可以达到70%左右,在我们常人眼里看来这些图片其实是没有多大区别的。
3.lib文件夹
so文件最终会被打包到libs目录中,我们针对libs目录的瘦身主要是去除不必要的平台ABI的so文件,例如我们只保留v7a和x86平台的so
defaultConfig {
ndk {
abiFilters "armeabi-v7a","x86"
}
}