Publishing a Flutter app on Google Play involves more than generating a release build. For new developer accounts, the mandatory closed testing period adds 14+ days to your timeline. Here is how to do it right.
Flutter apps publish to the Google Play Store as Android App Bundle (AAB) files, just like any other Android app. The technical requirements are the same. The key difference for Flutter developers is that the build-release process has a few Flutter-specific steps before you reach Play Console.
Step 1: Prepare a Release Build
Generate a Keystore
Run: keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload. This generates the keystore file you will use to sign your release build. Store this file and its password somewhere safe — you cannot recover it and losing it means you cannot update your app.
Configure build.gradle
In your Flutter project, edit android/app/build.gradle to reference your keystore. Create a key.properties file in the android directory with your keystore path, alias, and passwords. Flutter's build system reads this file automatically during release builds.
Build the AAB
Run: flutter build appbundle --release. This generates build/app/outputs/bundle/release/app-release.aab. This is the file you upload to Play Console.
Step 2: Create Your Play Console Store Listing
Before uploading your app, complete the Play Console store listing. Required: short description (80 chars max), full description (4000 chars), screenshots for phone (minimum 2), screenshots for 7-inch and 10-inch tablets if you support them, feature graphic (1024x500px), and a content rating questionnaire completion.
Complete your store listing before starting closed testing. A complete listing is required before applying for production access.
Step 3: Complete the Closed Testing Requirement
If your Google Play developer account was created after November 2023, you must complete 14 days of closed testing with 12+ real testers before applying for production access. Upload your AAB to the Closed Testing track specifically — not Internal Testing.
Flutter-specific note: make sure your release build has no debug assertions, no debug flags, and is properly signed. Some Flutter developers accidentally upload a debug-signed build to the closed track, which Play Console accepts but may behave differently for testers.
Step 4: Apply for Production Access
After 14 days with 12+ active testers, the production access application becomes available. Complete the questionnaire with specific details about your testing. For Flutter apps, mention the frameworks used and the range of Android versions you targeted during testing.
Common Flutter-Specific Issues
- Large AAB size: use flutter build appbundle --split-debug-info to reduce size
- Missing permissions: Flutter plugins may add permissions your app doesn't use — audit AndroidManifest.xml
- Obfuscation: if using --obfuscate, keep the symbol maps — you need them for crash reports
- Target API level: Google requires apps target the latest or recent-minus-one API level
- 64-bit support: Flutter produces 64-bit builds by default, which is correct for Play Store requirements
Need the 12 testers for your Flutter app's closed testing? We handle it for you.
Get Testers for Your Flutter App