Google Play (Android)Flutter

How to Publish a Flutter App on Google Play

Flutter compiles Dart code directly to native ARM code for Android, resulting in fast, smooth apps. The Android build process uses Gradle under the hood, but Flutter's tooling abstracts much of the complexity. This guide walks through generating a signed Android App Bundle, configuring Play App Signing, and navigating Google Play Console's requirements.

Prerequisites

  • Flutter SDK 3.16+ installed
  • Android Studio with SDK 33+ and command-line tools
  • A Google Play Developer account ($25 one-time fee)
  • JDK 17 installed and configured
  • Your app tested on multiple Android emulators and devices

Step-by-Step Build Process

1

Create an upload keystore

Run `keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload`. Store this keystore securely. Create a key.properties file in android/ referencing the keystore path, password, and alias.

2

Configure Gradle signing

Edit android/app/build.gradle to read from key.properties and add the signing config to the release build type. Ensure the key.properties file is in .gitignore to avoid committing credentials.

3

Build the App Bundle

Run `flutter build appbundle --release`. Flutter compiles Dart to native code and packages everything into an AAB at build/app/outputs/bundle/release/app-release.aab. The AAB format is required by Google Play.

4

Verify the bundle

Use `flutter build appbundle --analyze-size` to check the bundle size. Install and test the release build on a device using `flutter install --release` to catch any release-mode-only issues.

Code Signing & Certificates

Set up Play App Signing

When uploading your first AAB, enroll in Play App Signing. Google manages the app signing key while you use the upload key. This protects against upload key loss — Google can generate a new upload key if needed.

Backup your upload keystore

While Google can reset your upload key, it's still best practice to back up the keystore file and key.properties securely. Store copies in a password manager or secure cloud storage.

Store Submission Steps

1

Create the app in Play Console

Click 'Create app', fill in app details. Choose the appropriate category. Flutter apps should use 'Application' type unless you're using Flame for games.

2

Complete the store listing

Add descriptions, screenshots, and graphics. Flutter's consistent rendering means you can use any Android device/emulator for screenshots. Include at least phone screenshots — tablet screenshots are optional but recommended.

3

Upload and configure release

Navigate to Release > Production > Create new release. Upload the AAB. Fill in release notes. Google processes the bundle and generates optimized APKs for each device configuration.

4

Complete compliance checklist

Fill in content rating, target audience, data safety form, and advertising declarations. All sections must be complete before you can roll out.

5

Roll out to production

Review the release summary and roll out. First-time app reviews can take 1-7 days. Consider using staged rollouts (10-20% initially) for larger apps.

Common Rejection Reasons & Fixes

Data Safety section incomplete

Flutter apps using packages like http, dio, firebase_analytics, or shared_preferences collect or store data. Declare everything accurately in the Data Safety form. Check each Flutter package's documentation for data collection details.

Crashes on specific devices

Flutter's Impeller renderer may cause issues on some GPUs. If crash reports show rendering errors, test with `--no-enable-impeller` flag and consider adding fallback logic. Check Firebase Crashlytics for device-specific patterns.

Permissions not justified

Google scrutinizes apps requesting broad permissions. Only declare permissions your app actually uses in AndroidManifest.xml. Remove unused plugin permissions by adding `<uses-permission android:name='...' tools:node="remove"/>` entries.

App icon doesn't meet guidelines

Google requires adaptive icons (foreground + background layers). Use the flutter_launcher_icons package with adaptive_icon_foreground and adaptive_icon_background configurations to generate compliant icons.

Pro Tips

  • Use `flutter build appbundle --obfuscate --split-debug-info=build/debug-info` to obfuscate Dart code and reduce reverse engineering
  • Enable R8/ProGuard in build.gradle for additional code shrinking and obfuscation
  • Test on Android Go devices — they have limited memory and Flutter apps need optimization for these targets
  • Use the Google Play Console's pre-launch report to catch issues before review
  • Set `minSdkVersion` to 21 or higher — supporting Android 5.0+ covers 99%+ of active devices

Skip the hassle. Let us handle it.

Publishing a Flutter app on the Google Play (Android) involves dozens of steps, certificates, and potential rejection pitfalls. Our team handles the entire process for you — from build configuration to store approval.

Related Guides