Building & Publishing to Google Play Store
A complete, up-to-date guide for building, signing, and submitting your Flutter app to Google Play Store — updated for 2025–26 requirements including mandatory AAB format and targetSdkVersion 35.
2025–26 Breaking Changes — Read Before You Start
Google Play now
requires AAB (Android App Bundle)
— APK uploads are rejected for both new apps and updates. Additionally,
targetSdk 35 (Android 15)
is mandatory for all new submissions starting August 31, 2025. Older APK-only tutorials from 2023–2024 are now outdated and may cause your app submission to be rejected.
Prerequisites
Everything you need before starting the deployment process
- —Flutter SDK installed and updated to the latest stable version
- —Android Studio with Android SDK and build tools configured
- —JDK 8 or higher (bundled with Android Studio)
- —Google Play Developer Account ($25 one-time registration fee)
- —App icon — 512×512px PNG, no transparency or alpha channel
- —At least 2 phone screenshots (recommended: 4–8 at 1080×1920px or higher)
- —Privacy Policy URL — must be a hosted web page, not a PDF
- —App tested on a real physical device (not just emulator)
If you lose your keystore file, you cannot update your app. You would have to publish as a completely new app with a new package name. Back it up securely immediately after creation.
Prepare Your Flutter App
Configure app version, targetSdk, and app metadata before building
Before building, ensure your app is fully developed and tested. Update the following critical configurations inandroid/app/build.gradle:
versionCode must strictly increase with every upload. Google Play will reject a build if versionCode is the same as or lower than the previous release.
Then clean previous build artifacts and fetch all dependencies:
Generate Upload Keystore
Create a signing key — required once per app, stored securely forever
Google Play uses two separate keys: an upload key (you manage) and an app signing key (Google manages via Play App Signing). You only need to generate the upload keystore.
-keystore ~/upload-keystore.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias upload
-keystore $env:USERPROFILE\upload-keystore.jks `
-storetype JKS `
-keyalg RSA `
-keysize 2048 `
-validity 10000 `
-alias upload
Follow the prompts to enter your keystore password, key password, and organization details. Then create a key.properties file in the android/ directory:
Never commit key.properties or the .jks file to Git. Add both to your .gitignore immediately. In CI/CD pipelines, inject these values via environment variables instead.
Configure Gradle Build Script
Wire your keystore into the release build type
Open android/app/build.gradle and add the signing configuration to link your upload keystore to release builds:
You may need to run flutter clean after changing the Gradle file to prevent cached builds from affecting the signing process.
Build Release AAB
APK uploads are rejected by Google Play — AAB is required for all submissions
| Format | Use Case | Play Store Upload | File Size |
|---|---|---|---|
| AAB(.aab) | Play Store production release | ✓ Required | 15–30 MB typical |
| APK(.apk) | QA testing, direct distribution, enterprise | X Rejected for new apps | Larger (all ABIs bundled) |
Build AAB for Play Store submission:
If you still need an APK for QA testing or direct distribution (not Play Store), build a split APK instead of a fat APK: flutter build apk --release --split-per-abi . This generates separate, smaller APKs per CPU architecture.
Your AAB will be generated at: build/app/outputs/bundle/release/app-release.aab
Google Play Console — App Setup
Create your app listing and complete required store details
Create a Google Play Developer Account
Register at play.google.com/console . Pay the one-time $25 USD registration fee to access the Play Console.
Create a New App
Click Create app → Enter app name, select default language, choose app or game type, and set free or paid status. Accept the declarations and click Create app.
Complete the Setup Checklist
Play Console shows a "Set up your app" checklist. Complete all required sections: App content, Content rating, Data safety, Target audience, and Privacy policy.
Enable Play App Signing
In Setup → App integrity, enroll in Play App Signing. Google will manage your deployment key — you only upload with your upload key. This is the recommended approach for all new apps.
Complete Store Listing
Add your app icon (512×512px PNG, no alpha), screenshots (minimum 2), short description (80 characters max), and full description (up to 4,000 characters).
Package name cannot be changed after your app is published. Double-check the applicationId in build.gradle before your first submission.
Testing Tracks — Test Before Production
Always test through Internal Testing before promoting to Production
Google Play Console offers multiple testing tracks. Always release through Internal Testing first to validate the AAB in a real Play Store environment before going live.
| Track | Testers | Review Required | When to Use |
|---|---|---|---|
| Internal Testing | Up to 100 (by email) | Instant | First AAB validation, team testing |
| Closed (Alpha) | Groups or unlimited by link | Fast (hours) | Beta testers, wider feedback |
| Open (Beta) | Public opt-in | Standard | Pre-launch public testing |
| Production | All users | Standard (1–3 days) | Full public release |
Navigate to Internal Testing
In Play Console, go to Testing → Internal testing in the left sidebar.
Create a New Release
Click Create new release. Upload your app-release.aab file. Play Console will validate the AAB for errors and policy violations.
Add Testers
Add tester email addresses. They will receive an opt-in link to install the app via the Play Store — simulating the exact production install experience.
Publish to Production
Submit your app for Google Play review and public release
Promote from Testing or Create Production Release
Upload the AAB
app-release.aab . Play Console will validate the file and confirm it is signed in release mode.Configure Release Details
Choose Rollout Strategy (Optional)
Review and Send for Review
Review Timeline
Monitor Performance
For every subsequent update, always increment versionCode in build.gradle before building. Play Store will reject any upload with the same or lower versionCode as an existing release.
Conclusion
By following these steps, you can successfully build and publish your Flutter app to Google Play Store. Remember to always use AAB format , target SDK 35 , and back up your keystore file securely. Keep your app updated regularly, monitor Android Vitals for performance issues, and respond promptly to user feedback to maintain a high rating and ensure a positive user experience.