How to Publish Your Flutter App on Google Play Store

Publishing a Flutter app on Google Play is one of the most rewarding steps in the app development journey. Compared to the App Store, Google Play’s process is more straightforward in some ways but has its own set of requirements you need to get right. I’ve published multiple apps on Google Play under my Atlantis Kid brand, and in this article I’ll share the complete process along with practical tips from my experience.

Setting Up Google Play Console

First, you need a Google Play Developer account. Here’s what’s involved:

  1. Go to play.google.com/console and sign in with your Google account.
  2. Pay the one-time registration fee of $25 USD (much cheaper than Apple’s annual $99).
  3. Complete your developer profile, including your developer name, contact email, and website.
  4. Verify your identity — Google now requires identity verification for all new developer accounts.

Once your account is set up, you can start creating your app listing. But before you upload anything, you need to handle app signing.

Understanding App Signing

Android apps must be digitally signed before they can be installed. There are two signing mechanisms you need to understand:

Upload Key (Your Keystore)

This is the key you use to sign the app bundle before uploading to Google Play. Generate one using the keytool command:

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

You’ll be prompted to create a password and enter your details. Store this keystore file and its password securely. If you lose it, you’ll need to contact Google Play support to reset your upload key, which is a painful process.

I keep my keystore file outside my project directory and back it up in a secure location. Never commit your keystore to version control.

Google Play App Signing

Google Play manages the actual signing key used to sign APKs delivered to users. When you upload your app bundle, Google re-signs it with their key. This is called Play App Signing and is required for all new apps. The benefit is that if you lose your upload key, Google can help you reset it without affecting your users.

Configuring Your Flutter Project

Reference the Keystore

Create a file at android/key.properties (and add it to .gitignore):

storePassword=your-store-password
keyPassword=your-key-password
keyAlias=upload
storeFile=/path/to/your/upload-keystore.jks

Then update android/app/build.gradle to use these properties:

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

android {
    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword keystoreProperties['storePassword']
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

Version Configuration

Set your app version in pubspec.yaml:

version: 1.0.0+1

The format is versionName+versionCode. The versionCode (the number after +) must be a positive integer that increases with each release. Google Play uses the version code to determine whether one version is more recent than another.

App ID

Your Android application ID is set in android/app/build.gradle:

android {
    defaultConfig {
        applicationId "com.atlantiskid.yourapp"
    }
}

Choose this carefully — it permanently identifies your app on Google Play and cannot be changed after publishing.

Building the Release App Bundle

Google Play requires Android App Bundles (AAB) instead of APKs for new apps. Build yours with:

flutter build appbundle --release

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

If you need an APK for testing outside of Google Play:

flutter build apk --release

But for Google Play submission, always use the app bundle format. It allows Google Play to generate optimized APKs for each device configuration, resulting in smaller downloads for users.

Creating Your Store Listing

A well-crafted store listing is essential for discoverability and conversions. Here’s what you need to prepare:

App Title

You get up to 30 characters. Make it descriptive and include your primary keyword if possible. For example, “Happy Balloon Pop - Fun Game” is better than just “Happy Balloon Pop” because it includes the keyword “game.”

Short Description

Up to 80 characters. This appears in search results and at the top of your listing. Make every word count:

Pop colorful balloons in this fun and exciting arcade game for all ages!

Full Description

Up to 4000 characters. Structure it for readability:

🎈 Happy Balloon Pop - The Most Fun Balloon Popping Game!

Pop colorful balloons, score points, and challenge yourself
through increasingly exciting levels!

FEATURES:
★ Simple and intuitive controls
★ Beautiful colorful graphics
★ Multiple game modes
★ Fun for all ages
★ No internet required

HOW TO PLAY:
Tap the balloons to pop them before they float away!
Each level brings faster balloons and new challenges.

Download now and start popping!

Use formatting (emojis, bullet points, line breaks) to make it scannable. Most users don’t read the full description — they skim it.

Screenshots

Google Play requires at least 2 screenshots, but I recommend providing 8 for each device type:

  • Phone screenshots: 1080 x 1920 pixels (minimum)
  • Tablet screenshots: 1200 x 1920 pixels (7-inch) or 1600 x 2560 pixels (10-inch)

Create screenshots that tell a story about your app. I typically structure mine as:

  1. Hero shot showing the main gameplay or feature
  2. Key feature highlights with text overlays
  3. Different game modes or screens
  4. Achievement or progress system
  5. Settings or customization options

Feature Graphic

A 1024 x 500 pixel graphic displayed prominently on your store listing. This is prime real estate — design it carefully with your app’s branding, a clear value proposition, and eye-catching visuals.

App Icon

A 512 x 512 pixel icon. The flutter_launcher_icons package handles generating the right sizes for your app, but you’ll also upload a high-resolution version to the Play Console.

Content Rating

Google Play requires all apps to have a content rating. The process involves:

  1. Go to your app’s page in Play Console.
  2. Navigate to Policy > App content > Content ratings.
  3. Complete the IARC questionnaire honestly.
  4. You’ll receive a rating based on your answers (e.g., Everyone, Teen, Mature).

If your app displays ads, make sure to indicate that in the questionnaire. If your app targets children, there are additional requirements under the Families Policy.

Privacy Policy and Data Safety

Google Play requires a privacy policy for all apps that collect user data. If you use AdMob, Firebase Analytics, or similar services, you’re collecting data.

Host your privacy policy on a publicly accessible URL. I host mine at https://atlantiskid.com/privacy/app-name.html.

You also need to fill out the Data Safety section in Play Console. This is Google’s equivalent of Apple’s privacy nutrition labels. Declare what data your app collects, whether it’s shared with third parties, and how it’s used.

Release Management

Google Play offers several release tracks that let you gradually roll out your app:

Internal Testing

Up to 100 testers. The fastest track — builds are usually available within minutes. I use this for initial testing with a small group before moving to broader release.

Closed Testing

Invite specific testers via email lists or Google Groups. Useful for beta testing with a larger group. You can create multiple closed testing tracks.

Open Testing

Anyone can join your test by opting in on your store listing. This is a great way to gather feedback before your production launch.

Production

The full public release. For your first release, I recommend going through at least the internal testing track first to catch any issues.

To create a release:

  1. Go to Release > Production (or your chosen track).
  2. Click Create new release.
  3. Upload your AAB file.
  4. Add release notes describing what’s new.
  5. Review and roll out.

For production releases, you can do a staged rollout — start with 5% or 10% of users and gradually increase. This is invaluable for catching issues that only appear at scale.

Pricing and Distribution

In the Monetization setup section, decide whether your app is free or paid. Important: once an app is published as free, it cannot be changed to paid. You can, however, add in-app purchases at any time.

Select the countries where your app will be available. I typically select all countries unless there’s a specific reason not to.

Common Issues and Solutions

App Rejected for Policy Violations

Google Play has strict policies, especially around apps targeting children. Common issues include:

  • Ads in kids’ apps: If your app’s target audience includes children under 13, you must use ad SDKs that are compliant with Google’s Families Policy.
  • Missing privacy policy: Always provide one, even for simple apps.
  • Misleading metadata: Don’t use keywords that don’t relate to your app’s functionality.

Build Upload Failures

If your upload fails, check:

  1. Version code: Must be higher than any previously uploaded version.
  2. Signing: Ensure the AAB is signed with your upload key.
  3. File size: App bundles have a size limit of 150 MB (with asset packs for larger apps).

Slow Review Times

First-time app reviews can take several days to a week. Subsequent updates are typically reviewed within hours. Be patient with your first submission.

Post-Launch Best Practices

After your app is live on Google Play:

  1. Monitor the Android Vitals dashboard for crashes and ANRs (Application Not Responding). Google uses these metrics in ranking.
  2. Respond to reviews — especially negative ones. A thoughtful response can turn a 1-star review into a 5-star update.
  3. Update regularly with bug fixes and new features. Google favors actively maintained apps.
  4. Analyze your store listing with the Store Listing Experiments feature to A/B test different icons, screenshots, and descriptions.
  5. Set up your app-ads.txt file on your developer website if you’re running ads. This prevents unauthorized ad networks from selling your inventory.

Wrapping Up

Publishing to Google Play is more approachable than many developers expect. The key steps are: get your signing sorted out, build a compelling store listing, complete all the policy requirements, and test through the release tracks before going to production.

My biggest piece of advice: don’t rush the store listing. Your screenshots, description, and feature graphic are what convert visitors into users. Spend time making them great, and update them periodically as your app evolves.

Once you’ve gone through the process once, subsequent apps become much faster. The patterns and processes become second nature, and you’ll have templates you can reuse for screenshots, descriptions, and metadata. Happy publishing!