Signed Release App Bundle
Build and sign an .aab for distribution.
Signed Release App Bundle is a free Jetpack Compose Academy lesson on CoddyKit — lesson 3 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Jetpack Compose Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
From Debug to Release
Your debug builds run on your device, but the Play Store needs a release build: optimized, shrunk, and cryptographically signed by you.
AAB, Not APK
The Play Store wants an Android App Bundle (.aab), not an APK. Google generates device-specific APKs from it, so users download only what they need.
What Signing Proves
A signing key proves every update truly comes from you. Android refuses to install an update signed by a different key, which protects your users.
Create an Upload Keystore
You generate a keystore file holding your key. Guard it and its passwords carefully: lose them and you can lock yourself out of updating the app.
keytool -genkey -v \
-keystore upload.jks \
-alias uploadKeep Secrets Out of Git
Never commit passwords. Put them in gradle.properties (gitignored) or environment variables and read them in your build config.
RELEASE_STORE_PASSWORD=...
RELEASE_KEY_ALIAS=uploadConfigure the signingConfig
In build.gradle you declare a signingConfig that points to the keystore and credentials, then attach it to the release build type.
signingConfigs {
create("release") { /* keystore */ }
}Shrink with R8
Turn on minifyEnabled for release. R8 removes unused code and obfuscates names, making your bundle smaller and harder to reverse engineer.
release {
isMinifyEnabled = true
}Build the Bundle
Run the bundleRelease Gradle task. It compiles, shrinks, and signs your app, producing a release .aab ready to upload.
./gradlew bundleReleaseQuick Check
You are packaging your app for the Play Store. Which artifact should you upload?
Let Google Manage Signing
With Play App Signing, Google holds the final app signing key and you keep only an upload key. If your upload key is lost, you can reset it.
Test the Release Build
Before publishing, install the signed build via an internal testing track. R8 can break reflection, so confirm everything works in the optimized variant.
Bump Your versionCode
Every upload needs a higher versionCode than the last. The Play Store rejects duplicates, so increment it on each release before you build.
versionCode = 2
versionName = "1.1"Recap: Ready to Upload
You created a keystore, set up a signingConfig, shrank with R8, and built a signed .aab. Your app is ready for the Play Console.
Frequently asked questions
Is the “Signed Release App Bundle” lesson free?
Yes — the full text of “Signed Release App Bundle” is free to read here on the web, and the Jetpack Compose Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Jetpack Compose Academy course, upgrade to CoddyKit PRO.
What will I learn in “Signed Release App Bundle”?
Build and sign an .aab for distribution. You practise Jetpack Compose Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Jetpack Compose Academy?
No prior experience is required. Jetpack Compose Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 3 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Signed Release App Bundle” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Jetpack Compose Academy lesson?
Yes. Every Jetpack Compose Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.