Android中的包体积还是比较让人烦心的, 用户看见这么大的APK或者每次更新的时候都要花费巨大的流量去更新就想把你的APK给卸载掉,这里就记录下APK体积优化的方案
首先我们可以使用Android Studio的Analyze APK去进行检测,我们可以通过Analyze APK看到APK到底哪些地方占用了空间。
正常来说去做一些适配的时候让UI剪切不同大小的图片来进行适配,但是我们可以让UI就剪切一套图片资源,放在xhdpi中,我们的项目也是一直都这么处理的,在不同分辨率手机上的展示感觉也没什么区别
通过开启代码混淆,然后配置一些资源压缩能够减少包体积的大小,我现有的项目44M,开启混淆,后能到39M
buildTypes {
release {
minifyEnabled true
}
}
通过开启shrinkResources将那些没有任何父类调用的资源用更小的东西去替代,达到减小包体积的效果
buildTypes {
release {
shrinkResources true
}
}
用Android studio工具自带的Remove Unused Resources,可以完全清理掉,这里不像上面使用shrinkResources一样是用小东西替代的,而是全部清理掉的
慎用!会将一些反射或者字符串拼接获取方式的也给清理掉
通过resConfigs 配置设置语言支持,如果没有国外的需求,我们只要有中国的语言就好了
defaultConfig {
resConfigs "zh"
}
通过工具将资源图片进行压缩,或者采用一些jpeg,webp格式的图片,
so文件我们用armable、armable-x86两种即可,基本是都适配,如果有特定的需求那就把其他的几种也加上
使用微信AndResGuard开源工具对资源进行压缩,他会将资源文件名进行混淆
我们在集成一些第三方时,可能会出现一个问题,不同地区的定制化开发,比如A地区需要视屏会议功能,其他的地区又不要,那么其他的地区我们就不应该将视屏会议这个功能打进去,但是如果不打进去,跳转代码等等又会报错,这时候我们就可以用provided去依赖,保证编译通过
在Gradle.properties文件中建立一个参数为isMetting=true
然后在build.gradle中去判断该参数去分别依赖
if(isMeeting.toBoolean()){
implementation project(':mettinglibrary')
}else{
provided project(':mettinglibrary')
}
能够使用shap完成的图片就别让美工再出资源
避免重复的库,比如说我,为了快速开发,引用了两个三级联动的库,纯粹是浪费空间,好好检查一下每个引用进来的库的真正用处,用在哪,是否多余
在快速开发中肯定会产生一些无用的代码,尽量去清理掉他,有时候来了一个需求,等你做好了后,他又说不要了,然后写的一大堆的的代码又给废弃了,有时候你还真不确定他说的不要是否是真的不要,短时间内又不敢删,所以我们可以定期两个月删一次无用代码
插件化是将APP业务分离出来,将代码单纯提出来,打包的时候不会打进包里去,可以说是减少包体积大小最有效的办法了,他不在乎你的其他资源是否压缩,需要的时候再去下载就好了,但是国内的插件化都会有适配风险,而去现在谷歌也不支持这种
参考博客:https://blog.csdn.net/u012124438/article/details/54958757
感谢大佬的博客,让我学到了很多,本人上面所写都是本人检验过,或者正在用的方案,真实有效。