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.

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:
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:
dart run flutter_launcher_iconsDo 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:
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:
package app.yourname.yourapp3. 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:
minSdk = 23
targetSdk = 35If 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.
keytool -genkey -v -keystore ~/upload-keystore.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-alias uploadCreate 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.
storePassword=yourpassword
keyPassword=yourpassword
keyAlias=upload
storeFile=/Users/yourname/upload-keystore.jksReference it in build.gradle
Load the keystore properties at the top of android/app/build.gradle:
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:
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:
flutter build appbundle --releaseThe 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.
