So you've built an amazing Flutter app and now you want to share it with the world on Google Play Store? Congratulations! This is an exciting milestone. Let me walk you through the entire process step-by-step, and I promise it's simpler than you think.
Before we dive into the technical steps, let's talk about why this matters. Publishing your app to Google Play Store gives it credibility, makes it discoverable to millions of potential users, and establishes your presence as a developer. Plus, it's the only official way most users expect to download Android apps.
Before starting, make sure you have:
Think of a keystore as a certificate that proves you're the real owner of this app. It signs your APK so Google knows it's from you. You only need to create this once.
Run the keytool command (Java/JDK must be installed and keytool available on your PATH):
macOS / Linux
keytool -genkey -v -keystore ~/my-release-key.jks \ -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias
Windows (Command Prompt)
keytool -genkey -v -keystore %USERPROFILE%\my-release-key.jks \ -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias
Windows (PowerShell)
keytool -genkey -v -keystore $env:USERPROFILE\my-release-key.jks \ -keyalg RSA -keysize 2048 -validity 10000 -alias my-key-alias
The command asks for a keystore password and some identifying info — remember the password. If keytool is not found on Windows, ensure the JDK's bin folder is added to your PATH.
cp ~/my-release-key.jks android/app/my-release-key.jks # or keep it outside the repo and reference an absolute path in key.properties
key.properties (keep secrets out of VCS)Create a file at android/key.properties:
storePassword=YOUR_STORE_PASSWORD keyPassword=YOUR_KEY_PASSWORD keyAlias=my-key-alias storeFile=app/my-release-key.jks
Add android/key.properties and the keystore to .gitignore so you don't commit secrets.
Edit android/app/build.gradle:
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 file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}flutter build appbundle --release
Pro Tip: Use environment variables or your CI provider's secret store to avoid keeping passwords in plain text.
Now let's create the actual app file for Google Play Store:
flutter build appbundle --release
Why appbundle instead of apk? Because Google Play Store uses Android App Bundles now, which are more efficient and smaller in size. The Play Store automatically generates optimized APKs for each device.
This command will take a few minutes. When it's done, you'll have a file at build/app/outputs/bundle/release/app-release.aab
Time Check: The first build might take 5–10 minutes. Subsequent builds are faster. Grab a coffee while you wait!
Head to Google Play Console and sign in with your Google account. If this is your first time, you'll need to:
In Google Play Console, click “Create App” and fill in:
Go to the “Release” section on the left menu, then click “Production”. Upload your app-release.aab file here. Google will scan it for security issues — this takes a few seconds.
Security Scan: Google automatically checks your app for malware and suspicious behavior. Legitimate apps pass instantly.
Now comes the marketing part! You need to fill in:
Pro writing tips for descriptions:
Decide if your app is:
Also choose which countries to distribute in. Start with English-speaking countries, then expand once you're confident.
Answer questions about your app's content. Google needs to know if it's appropriate for kids, if it contains ads, analytics, etc. Be honest here — deceptive apps get removed quickly.
Check everything one more time. Review the app name, description, screenshots, and pricing. Then click “Submit for Review”. Google will review your app (usually takes 2–24 hours) for policy violations, crashes, and security issues. If everything looks good, your app goes live!
Launch Day: Your app is now on Google Play Store! Tell your friends, share on social media, and start collecting those 5-star reviews.
Q: My app was rejected. Why?
A: Common reasons include crashes, misleading descriptions, or policy violations. Read Google's feedback carefully, fix the issue, and resubmit.
Q: How often can I update my app?
A: As often as you want! Once approved, you can submit new versions anytime. Each update goes through a review process.
Q: Can I change my pricing later?
A: Yes! You can make your paid app free, add in-app purchases, or even remove the app. Changes take effect within hours.
Publishing to Google Play Store is actually straightforward once you understand the steps. The entire process from setup to submission takes about 30–45 minutes. The hardest part isn't the technical stuff — it's writing compelling app descriptions and creating great screenshots that make people want to download.
So go ahead, take that leap, and get your app in front of millions of potential users. The Play Store is waiting for your app!
Have questions about app publishing? Get in touch — I help developers launch their apps every week.