How to Release Your Android App on Google Play Store - Complete Guide
Step-by-step guide to securely prepare and release your Android app on the Google Play Store. Learn about signing keys, app bundles, and the release checklist.
This comprehensive guide outlines the essential steps to securely prepare your Android app for release on the Google Play Store. Whether you’re using Flutter, Kotlin, or Java, these best practices apply to all Android development workflows.
Overview
Releasing an Android app requires careful attention to security, especially regarding signing keys and configuration files. This guide covers everything from generating your signing key to building the final app bundle.
1. 🔐 Secure Signing Keys
IMPORTANT: Never commit your .jks or key.properties files to version control (GitHub). These files are already added to .gitignore for your protection.
Generate an Upload Keystore
If you haven’t already generated your upload key, run this command:
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
Store this file securely—it’s required for all future updates to your app.
Create key.properties File
Create a file at android/key.properties with the following content:
storePassword=<your-store-password>
keyPassword=<your-key-password>
keyAlias=upload
storeFile=<path-to-your-keystore-file>
Security Tip: Never commit this file to version control. Consider using environment variables or a secrets manager for production builds.
2. 🏗️ Update Build Configuration
To use the key.properties file in your Flutter project, update android/app/build.gradle.kts:
// Add this near the top of the 'android' block
val keystorePropertiesFile = rootProject.file("key.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
android {
// ...
signingConfigs {
create("release") {
keyAlias = keystoreProperties["keyAlias"] as String?
keyPassword = keystoreProperties["keyPassword"] as String?
storeFile = keystoreProperties["storeFile"]?.let { file(it) }
storePassword = keystoreProperties["storePassword"] as String?
}
}
buildTypes {
getByName("release") {
signingConfig = signingConfigs.getByName("release")
// Enable obfuscation for smaller APK size
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
}
3. 📦 Build the App Bundle
Google Play Store requires the App Bundle (.aab) format instead of APK for better compression and modular delivery:
flutter build appbundle --release
The output file will be located at:
build/app/outputs/bundle/release/app-release.aab
4. ✅ Pre-Launch Checklist
Before uploading to Google Play Console, verify:
- Version name and code are updated in
pubspec.yaml - App icon is correctly generated and displayed
- Privacy Policy is uploaded to your website or GitHub Pages
- All debug prints and logs are removed or disabled
- Keystore file is backed up securely
- Test flight build on a physical device before release
Need Help?
For more detailed documentation on Android signing, visit the official Android documentation.