随着应用业务功能的日益复杂,使用的第三方库和SDK也会日益增加,这样导致的直接后果就是安装包的体积日渐增加,除了使用插件化的手段,减少安装包的体积,我们还可以从以下几个方面着手,进行安装包大小的优化。
代码混淆
ProGuard是一个开源的Java代码混淆器,并且默认集成到Android SDK中,它具有以下功能:
压缩:移除无效的类、属性、方法等。
优化:移除没用的结构。
混淆:把类名、属性名、方法名替换为一到两个字母
Gradle配置
开启minifyEnabled 开启混淆
开启shrinkResources 我们在打包的时候默认会把没有用到的资源(比如图片)也打包成app,徒增了应用的大小。现在我们可以利用Gradle来优雅的去除没有用到的资源文件了!就是在gradle中配置shrinkResources true,这个依赖于minifyEnabled,所以mini fyEnabled也要为true才会生效。如下代码示例
buildTypes {
debug {
minifyEnabled true
shrinkResources true
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
资源优化
使用Android Lint删除冗余资源
Step 1. 单击菜单栏中的Analyze -> Run Inspection by Name,弹出工具选择框
Step 2. 在弹出的输入框中输入Unused resources,回车进入扫描前目录设置对话框
Step 3. 选择需要扫描的目录或者整个工程,单击OK开始
Step 4. 扫描完成后生成报告,可在Android Studio中直接查看并删除确认无用的资源文件。
注:Android Lint不会分析assets文件夹下的资源,因为assets文件可以通过文件名直接访问,不需要通过具体的引用,Lint无法判断资源是否被用到。
资源文件最少化
在这方面有以下一些建议:
- 尽量使用一套图片资源,遇到一些图片在不同分辨率手机上变化差异过大的情况时,再考虑在相应文件夹下放入这个特定的图片
- 使用一套图、一套布局、多套dimens.xml文件,在使用最小资源的情况下,解决多分辨率适配
- 使用轻量级的第三方库
- 减少项目中的预置图片,预置图片改成有服务器下发,尽可能将程序与资源分离。
图片优化
tinypng有损压缩
png换成jpg
jpg换成webp
其中安装jpg转webp工具: brew install webp
转换命令:cwebp -q 50(或者75) input.jpg output.webp
大图缩小
覆盖aar里一些默认的大图,主module(apk)会覆盖依赖module的资源文件,但是values会合并