包体积直接影响下载转化率和更新率。每多 1MB,都可能让一部分用户放弃下载。包体积优化不是一次性工作,是持续监控的过程。
一、APK / AAB 里都有什么
用 Android Studio 的 APK Analyzer 打开一个 APK,通常会看到:
classes.dex:编译后的字节码res/:图片、布局、字符串等资源assets/:原始文件lib/:.so 动态库resources.arsc:资源索引表META-INF/:签名信息
优化要分门别类,不能一刀切。
二、Dex 优化
开启 R8 压缩和混淆
android {
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
}
启用 Dex 分包优化
android {
packagingOptions {
dex {
useLegacyPackaging = false
}
}
}
减少依赖:没用的库及时移除,能用官方库就不用第三方库。
三、资源优化
android {
buildFeatures {
resValues = false
shaders = false
}
}
用 WebP 替代 PNG/JPEG
只保留需要的屏幕密度
移除未使用资源:
shrinkResources true矢量图替代多份位图
语言资源只打包需要的:
resConfigs "zh", "en"
四、Assets 与 so 库
大文件放云端按需下载
so 库按 ABI 分包,AAB 会自动处理
能静态链接的不要动态链接多余库
android {
defaultConfig {
ndk {
abiFilters += setOf("arm64-v8a", "armeabi-v7a")
}
}
}
五、监控包体积
CI 里记录每次构建大小
用 APK Analyzer 对比版本差异
设置阈值告警,超过 1MB 自动通知
定期清理无用资源和依赖
小结
包体积优化要按 Dex、资源、Assets、so 分类处理
R8 混淆和 shrinkResources 是基本操作
WebP、矢量图、resConfigs 能显著减小资源体积
持续监控,防止体积回弹
下一篇,我们聊聊网络优化:连接复用、缓存与弱网适配。
参考阅读
引用链接
[1]APK Analyzer: https://developer.android.com/studio/debug/apk-analyzer
[2]Shrink, obfuscate, and optimize your app: https://developer.android.com/studio/build/shrink-code