准备发布构建
了解应用包和代码收缩
准备发布构建 是 CoddyKit 上的免费 Android Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。
从调试版到发布版
您每天都在 Android Studio 中运行调试构建。但 Google Play 需要的是发布构建:体积更小、速度更快,而且不会标记为可调试。
发布构建有三个关键区别:使用发布密钥进行签名,设置为 debuggable false,并且通常会进行压缩以移除未使用的代码和资源。
在本课中,您将准备一个正确的发布构建,并生成 Google Play 所需的文件:Android 应用包(.aab)。
Gradle 中的构建类型
Gradle 默认定义了两种构建类型:debug 和 release。您可以在模块的 build.gradle.kts 中进行配置。
release 代码块用于启用优化。请注意下面的 isMinifyEnabled 和 isShrinkResources——它们是让应用体积变小的开关。
android {
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}AAB 与 APK
Google Play 要求使用Android 应用包(.aab),而不是普通的 .apk。
- .apk 包含适用于所有设备的代码和资源——所有屏幕密度、所有 CPU 架构以及所有语言。
- .aab 会上传到 Play,然后由 Play 针对每位用户的具体设备生成体积小且经过优化的 APK。
结果是:用户下载的数据更少,应用安装后的体积也更小。您仍然可以使用 APK 在手机上直接测试,但发布时应使用 AAB。
什么是 R8 / 压缩
当 isMinifyEnabled = true 时,Android Studio 会运行 R8。R8 会在一次处理中完成三项工作:
- 压缩——移除应用从未调用的类和方法。
- 混淆——将类和方法重命名为
a、b、c等短名称,以节省空间并阻碍逆向工程。 - 优化——内联并重写代码,使其运行更快。
资源压缩(isShrinkResources = true)还会移除未使用的可绘制资源、布局和字符串。
使用 ProGuard 保留规则
R8 有时会移除或重命名仅通过反射引用的代码(例如 Gson、Retrofit 或序列化所引用的代码)。您可以在 保留规则中保护这些代码,规则位于 proguard-rules.pro。
保留规则会告诉 R8:“不要重命名或删除这些类。”
# proguard-rules.pro
# Keep data classes used with Gson reflection
-keep class com.example.app.model.** { *; }
# Keep Retrofit interface methods
-keepattributes Signature
-keepattributes *Annotation*
# Keep Kotlin metadata used by libraries
-keep class kotlin.Metadata { *; }为应用设置版本
每个发布版本都需要在 build.gradle.kts 中设置两个版本值:
versionCode— 必须随每次上传递增的整数。Play 使用它来判断哪个构建版本更新。versionName— 面向用户显示的易读字符串,例如"1.4.0"。
如果忘记递增 versionCode,Play 会将上传内容视为重复版本并拒绝。
android {
defaultConfig {
applicationId = "com.example.app"
minSdk = 24
targetSdk = 35
versionCode = 12
versionName = "1.4.0"
}
}在 Android Studio 中构建捆绑包
要通过界面创建已签名的发布捆绑包:
- 打开构建 → 生成已签名的捆绑包 / APK。
- 选择Android 应用捆绑包。
- 选择(或创建)您的密钥库和密钥。
- 选择 release 构建变体。
Android Studio 会运行 R8、为捆绑包签名,并将 .aab 放入 app/release/。您要上传到 Play 的就是这个文件。
从命令行构建
对于 CI/CD 或脚本,您可以直接使用 Gradle 构建捆绑包。任务名称遵循 bundle<Variant> 模式。
bundleRelease 会生成 AAB。文件会位于 app/build/outputs/bundle/release/。
# Build a release App Bundle (.aab)
./gradlew bundleRelease
# Output:
# app/build/outputs/bundle/release/app-release.aab
# Build a release APK instead (for direct install/testing)
./gradlew assembleRelease检查和测试 AAB
您无法直接在手机上安装 .aab。要测试 Play 将生成的准确 APK,请使用 Google 的 bundletool。
它会根据您的捆绑包构建设备专用的 APK,并将其安装到已连接的设备上——这是最接近真实 Play 下载的方式。
# Generate APKs from the bundle for the connected device
java -jar bundletool.jar build-apks \
--bundle=app-release.aab \
--output=app.apks \
--connected-device
# Install them on the device
java -jar bundletool.jar install-apks --apks=app.apks从发布版本中移除调试代码
发布版本不应记录敏感数据,也不应启用仅用于调试的功能。请使用 BuildConfig.DEBUG 来分支处理行为。它仅在调试构建中为 true。
R8 甚至可以移除由常量 false 控制的代码块,因此这也能减小应用体积。
fun setupLogging() {
if (BuildConfig.DEBUG) {
// Verbose logging only in debug builds
Log.d("App", "Debug logging enabled")
Timber.plant(Timber.DebugTree())
} else {
// Release: send to crash reporting only, no console spam
Timber.plant(CrashReportingTree())
}
}发布准备检查清单
构建最终捆绑包之前,请确认:
versionCode已递增,versionName已更新。- 发布版本已启用
isMinifyEnabled和isShrinkResources。 - 已为所有基于反射的库添加保留规则。
targetSdk满足 Play 当前的要求。- 发布代码中没有仅用于调试的日志记录或测试端点。
- 已通过 bundletool 在真实设备上测试 AAB。
这些项目全部通过后,您的 .aab 就可以上传了。
快速检查
您设置了 isMinifyEnabled = true,应用在发布版本中因 JSON 解析器报告“找不到类”错误而崩溃,但在调试版本中运行正常。最可能的原因是什么?
回顾:准备发布版本
现在您已经了解如何将调试应用转换为可发布的构建版本:
- Play 要求上传已签名的 .aab,并会根据它为每台设备生成 APK。
release构建类型通过isMinifyEnabled和isShrinkResources启用 R8,以进行压缩、混淆和优化。- 保留规则可以防止基于反射的代码被移除。
- 始终递增
versionCode并更新versionName。 - 使用
./gradlew bundleRelease构建,并使用 bundletool 测试结果。
下一步:了解使此构建值得信任的签名机制究竟如何工作。
常见问题解答
「准备发布构建」课时是免费的吗?
是的 — 「准备发布构建」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。
「准备发布构建」这节课中我会学到什么?
了解应用包和代码收缩 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Android Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「准备发布构建」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Android Academy 课中编写并运行代码吗?
能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。