This guide walks you through publishing your Flutter app to the Google Play Store. It covers everything from creating an app icon to uploading your final build.

Publish Flutter app to Google Play Store

Before you start, refer to the official Flutter deployment docs which has the most up-to-date information.

1. Create Your App Icon

Use the flutter_launcher_icons package. Prepare a 1024x1024 PNG icon with a transparent background for Android adaptive icons. Create an assets folder in your project root and drop your icon there.

Add the package to your pubspec.yaml under dev_dependencies and configure it:

yaml
dev_dependencies:
  flutter_launcher_icons: ^0.14.3

flutter_launcher_icons:
  android: "launcher_icon"
  ios: false
  image_path: "assets/icon.png"
  adaptive_icon_foreground: "assets/icon.png"
  adaptive_icon_background: "#FFFFFF"

The adaptive_icon_foreground and adaptive_icon_background are for modern Android adaptive icons. The background can be an image or a hex color. Run the generator:

bash
dart run flutter_launcher_icons

Do a flutter clean, then flutter run to verify your new icon appears on the home screen.

2. Set Your App ID

Every app needs a unique application ID. Flutter defaults to com.example.yourapp which you need to change. Open android/app/build.gradle and update both the namespace and applicationId:

kotlin
android {
    namespace = "app.yourname.yourapp"

    defaultConfig {
        applicationId = "app.yourname.yourapp"
        ...
    }
}

Also update the package declaration in android/app/src/main/kotlin/.../MainActivity.kt to match:

kotlin
package app.yourname.yourapp

3. Update SDK Versions

In build.gradle, update the SDK targets. Google Play requires you to target recent API levels, and they bump the requirement every year:

kotlin
minSdk = 23
targetSdk = 35

If Google Play rejects your build for targeting an older SDK, this is where you bump the number.

4. Sign the App

Android requires all apps to be digitally signed before they can be installed. You need to create a keystore file once and reference it in your build configuration.

Generate the Keystore

Run this command (Mac/Linux). It will ask for a password and some identity questions. Keep the resulting .jks file somewhere safe. You need it for every future update.

bash
keytool -genkey -v -keystore ~/upload-keystore.jks \
  -keyalg RSA -keysize 2048 -validity 10000 \
  -alias upload

Create key.properties

In the android/ folder, create a file called key.properties with your keystore details. Add this file to .gitignore so it never gets pushed to a public repo.

dart
storePassword=yourpassword
keyPassword=yourpassword
keyAlias=upload
storeFile=/Users/yourname/upload-keystore.jks

Reference it in build.gradle

Load the keystore properties at the top of android/app/build.gradle:

kotlin
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(
        new FileInputStream(keystorePropertiesFile)
    )
}

Then configure signing and update the release build type. Change the default signingConfigs.debug to signingConfigs.release:

kotlin
signingConfigs {
    release {
        keyAlias keystoreProperties['keyAlias']
        keyPassword keystoreProperties['keyPassword']
        storeFile keystoreProperties['storeFile']
            ? file(keystoreProperties['storeFile']) : null
        storePassword keystoreProperties['storePassword']
    }
}

buildTypes {
    release {
        signingConfig signingConfigs.release
    }
}

After all these changes, run flutter clean and flutter run to make sure everything still builds.

5. Build the App Bundle

Google Play requires an AAB (Android App Bundle), not an APK. Build it with:

bash
flutter build appbundle --release

The output file is at build/app/outputs/bundle/release/app-release.aab. This is what you upload to Google Play.

6. Google Play Console

Go to the Google Play Console and sign in. If this is your first time, there is a one-time $25 registration fee. Create a new app and fill in the basics: app name, app or game, free or paid.

Dashboard Checklist

The dashboard shows a checklist of required steps. Work through each:

  • Privacy policy — provide a URL. Even simple apps need one.
  • App access — state whether all features work without login.
  • Ads — declare whether your app shows ads.
  • Content rating — answer the questionnaire about your content.
  • Target audience — select the age group.
  • Data safety — declare what user data you collect.

Store Listing

Pick a category, write a short and full description, provide your contact email, and upload screenshots following the size guidelines in the console.

7. Create a Release

Go to Production in the sidebar, create a new release, and upload your .aabfile. Give it a release name (e.g., "1.0.0") and hit Next.

If you get an error about no countries selected, go to Production → Countries/regions and select where you want your app available.

Once everything looks good, go to Publishing overview and send the changes for review.

8. Wait for Review

Your dashboard will show "In review". Google typically reviews new apps within a few hours to a couple of days. You get an email when your app goes live.

Watch the video

This article is based on the YouTube tutorial. Watch it here if you prefer video.