How to Publish a Flutter App on Google Play (2026)
From flutter build appbundle to a live closed test: signing with an upload key, version numbers in pubspec.yaml, target API 36, and the 12-tester requirement.
Short answer
Create an upload keystore, reference it from android/key.properties in your Gradle signing config, set the version in pubspec.yaml, make sure you target API 36, then run flutter build appbundle. Upload the .aab from build/app/outputs/bundle/release/ to a closed testing track in Play Console.
1. Set the application ID
In android/app/build.gradle(.kts), set applicationId to your permanent package name, like com.yourdomain.appname. It can’t change after your first upload. See package names.
2. Create an upload key
Generate a keystore with keytool (Android Studio’s Generate Signed Bundle wizard also works). Store the file outside your repo and back it up.
Create android/key.properties with storePassword, keyPassword, keyAlias and storeFile, and add it to .gitignore.
3. Wire up signing in Gradle
In android/app/build.gradle(.kts), load key.properties and add a release signingConfig that uses those values, then set the release build type to use it. Flutter’s official “Build and release an Android app” docs show the exact snippet for both Groovy and Kotlin DSL.
With Play App Signing (the default), this key is your upload key. Google holds the app signing key. Lose the upload key and you can request a reset.
4. Version and target SDK
- In pubspec.yaml, version: 1.0.0+1 means versionName 1.0.0 and versionCode 1. Bump the number after + on every upload. See version code already used.
- Since August 31, 2026, new apps and updates must target API 36. Upgrade Flutter, and confirm targetSdk in the Gradle file. See target API 36.
5. Build the bundle
Run flutter build appbundle. The output is build/app/outputs/bundle/release/app-release.aab. Flutter builds for the 64-bit ABIs Play needs.
6. Flutter-specific gotchas
| Problem | Fix |
|---|---|
| App crashes only in release | Check code shrinking rules for plugins, and test a release build locally |
| Internet works in debug, not release | Add the INTERNET permission to the main AndroidManifest.xml |
| Wrong app name on device | Set android:label in AndroidManifest.xml |
| Icon is the Flutter logo | Generate launcher icons for all densities |
After the bundle is built: same path for every app
- Create the app in Play Console and complete the store listing and App content. See does a closed test need a store listing.
- Upload the .aab to a closed testing track (internal first is optional). See upload your first AAB.
- Attach a tester list and publish. Share the opt-in link.
- On a new personal account: keep 12+ testers opted in for 14 days, then apply for production access.
Frequently asked questions
Should I build an APK or an app bundle with Flutter?
For Google Play, build an app bundle with flutter build appbundle. New apps must use App Bundles. Use APKs only for sideloading tests.
Do I need to obfuscate Dart code?
It’s optional. If you use Flutter’s obfuscation flags, keep the generated symbol files so you can read crash stack traces later.
Where do I set the app icon for Flutter Android?
Android launcher icons live in android/app/src/main/res. Many developers use a package to generate every density from one image.
Sources and how we keep this accurate
- Android Developers: About Android App Bundles
- Play Console Help: Use Play App Signing
- Android Developers: Meet Google Play’s target API level requirement
- Flutter docs: Build and release an Android app
Policy facts are checked against Google's own documentation on the date shown above. Google can change requirements at any time, so confirm in your Play Console. Where we give advice or estimates rather than Google's rules, we say so. TestersZone is independent and not affiliated with Google. Drafts are AI-assisted and reviewed by our team.
Need 12 testers? Get them free.
Test 3 apps, earn 60 credits, and list your app for up to 20 real testers with verified daily check-ins.
Start freeKeep reading
How to Upload Your First App Bundle to Play Console
How to Publish a FlutterFlow App on Google Play
Target API Level 36: The Google Play Deadline Explained
How to Publish a React Native App on Google Play
How to Publish an Expo App on Google Play With EAS
How to Write Testing Instructions Testers Actually Follow
Browse all guides, or see the quick answers, guides and comparisons.