APK 组成部分
APK 优化主要分为:Dex、Resource、Assets、Native Libraries
检测工具
Matrix-ApkChecker是针对android安装包的分析检测工具,根据一系列设定好的规则检测apk是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪。
优化措施
代码混淆
使用 ProGuard 混淆代码
在 Android 中代码混淆和压缩都是通过 ProGuard 来实现的,ProGuard会检测和移除代码中未使用的类、字段、方法和属性。
在 build.gradle中,使用minifyEnabled属性来开启代码混淆:
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
...
}
使用shrinkResources压缩资源
在 build.gradle 中使用 shrinkResources 属性来开启资源压缩,它在构建 apk 时可以移除那些没有引用到的资源文件,通常它必须与 minifyEnabled 属性一起使用:
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
注意的是,开启该属性设置后,它并不会移除 values/ 文件夹中定义的资源,例如:字符串、颜色、样式等等。
使用resConfigs去除多余的语言包
目前很多第三方库内包含了各种语言包,但是大多数情况下我们的应用是不需要国际化,仅仅需要中文的就可以了,所以可以 resConfigs 配置来去掉多余的语言包:
android {
defaultConfig {
...
resConfigs "zh"
}
}
去掉Debug信息或者去掉行号
facebook的Dex优化工具:Redex
Dex 分包
facebook的Dex优化工具:Redex
资源压缩
使用AndResGuard工具
AndResGuard 主要对打包后的图片进行压缩,使用7zip压缩方式对图片进行压缩。
Tips
- 使用不带alpha值的jpg图片
对于非透明的大图,jpg将会比png的大小有显著的优势,虽然不是绝对的,但是通常会减小到一半都不止。
- 使用tinypng有损压缩
在保持alpha通道的情况下对PNG的压缩可以达到1/3之内,而且用肉眼基本上分辨不出压缩的损失。
- 使用webp格式
webp支持透明度,压缩比比,占用的体积比JPG图片更小。