You built the app. You tested it. CI/CD is set up. Now it is time to put it in front of real users.
Publishing to the Play Store involves more than clicking “Upload.” You need to sign the app correctly, write a compelling store listing, take good screenshots, and understand how ASO (App Store Optimization) works.
In this tutorial, you will learn the complete publishing process — from creating a developer account to staged rollouts.
Prerequisites: You should have a release-ready app. See Android Tutorial #16: App Security for R8 and Android Tutorial #18: CI/CD for automated builds.
Google Play Developer Account
Setting Up
- Go to play.google.com/console
- Pay the one-time $25 registration fee
- Complete identity verification (required since 2023)
- Set up a payments profile if you plan to charge for the app
Identity verification takes 2-7 business days. Start this process early.
App Signing
Every Android app must be signed with a certificate. There are two approaches:
Play App Signing (Recommended)
Google manages your app signing key. You upload with a separate upload key.
You → Upload Key → Google Play → App Signing Key → User
Benefits:
- Google backs up your signing key (you can’t lose it)
- Smaller APKs via App Bundle optimization
- Key rotation if your upload key is compromised
To enable Play App Signing:
- Go to Play Console → Your App → Setup → App signing
- Follow the wizard to generate or upload your app signing key
- Use the upload key for all future uploads
Creating a Keystore
If you don’t have a keystore yet:
keytool -genkeypair \
-v \
-keystore upload-keystore.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias upload \
-storepass your_store_password \
-keypass your_key_password
Important: Back up your keystore and passwords securely. If you lose them and don’t use Play App Signing, you can never update your app.
Configuring Signing in Gradle
android {
signingConfigs {
create("release") {
storeFile = file("upload-keystore.jks")
storePassword = System.getenv("KEYSTORE_PASSWORD")
?: error("KEYSTORE_PASSWORD environment variable not set")
keyAlias = System.getenv("KEY_ALIAS")
?: error("KEY_ALIAS environment variable not set")
keyPassword = System.getenv("KEY_PASSWORD")
?: error("KEY_PASSWORD environment variable not set")
}
}
buildTypes {
release {
signingConfig = signingConfigs.getByName("release")
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}
Building the AAB
The Play Store requires Android App Bundles (AAB), not APKs:
./gradlew bundleRelease
The output is at app/build/outputs/bundle/release/app-release.aab.
AAB benefits over APK:
- Google generates optimized APKs for each device configuration
- Smaller downloads (users only get the resources they need)
- Dynamic feature modules support
Store Listing
Your store listing is the first thing users see. It determines whether they install your app.
App Name and Title
- Maximum 30 characters
- Include your primary keyword
- Example: “TaskFlow — Task Manager”
Short Description
- Maximum 80 characters
- This appears below your app name in search results
- Include your most important keyword
- Example: “Simple task manager with reminders, lists, and widgets”
Full Description
- Maximum 4,000 characters
- Structure it like a landing page:
[Opening hook — what the app does]
Key Features:
• Feature 1 — brief explanation
• Feature 2 — brief explanation
• Feature 3 — brief explanation
Why TaskFlow?
[Your unique selling point]
What's New:
[Latest features or improvements]
Use relevant keywords naturally. Don’t stuff keywords — Google penalizes it.
Category
Choose the most specific category that fits. For a task manager: “Productivity.”
Screenshots
Screenshots are the most important factor in conversion. Users scroll through them before reading the description.
Requirements
| Type | Minimum | Recommended Size | Required? |
|---|---|---|---|
| Phone | 2 | 1080 x 2400 px (e.g. Pixel 7) | Yes |
| 7-inch tablet | 0 | 1600 x 2560 px | Recommended |
| 10-inch tablet | 0 | 1600 x 2560 px | Recommended |
Screenshot Strategy
- First screenshot — show the main feature (this appears in search results)
- Screenshots 2-4 — show key features with captions
- Last screenshot — show settings or customization options
Add text captions to screenshots:
- “Track your tasks with smart lists”
- “Never miss a deadline with reminders”
- “Beautiful dark and light themes”
Tools for creating screenshots:
- Figma — design custom frames with device mockups
- Screenshots — capture from emulator with different themes
- Canva — quick screenshot frames with text
Taking Screenshots from Emulator
# Light mode screenshot
adb shell cmd uimode night no
adb exec-out screencap -p > screenshot_light.png
# Dark mode screenshot
adb shell cmd uimode night yes
adb exec-out screencap -p > screenshot_dark.png
Feature Graphic
The feature graphic is the banner at the top of your listing. Required to publish any store listing.
- Size: 1024 x 500 pixels
- Keep it simple: app icon + name + tagline
- Avoid small text (it gets compressed)
Data Safety Form
The data safety form is mandatory. It tells users what data your app collects and how it is used.
Common Entries
| Data Type | Collected? | Shared? | Purpose |
|---|---|---|---|
| Email address | Yes (if auth) | No | Account management |
| Crash logs | Yes | No | App stability |
| Analytics events | Yes | No | App improvement |
| Device identifiers | Yes | No | Analytics |
| App interactions | Yes | No | Analytics |
Be honest. Google reviews these forms and can remove apps that misrepresent their data practices.
Filling It Out
- Go to Play Console → Your App → App content → Data safety
- Answer each question about data collection
- Specify if data is encrypted in transit
- Specify if users can request data deletion
- Submit for review
Tip: If you use Firebase, you collect crash logs (Crashlytics), analytics events (Analytics), and possibly auth data. Account for all of these.
App Store Optimization (ASO)
ASO is SEO for the Play Store. It determines where your app appears in search results.
Key Ranking Factors
- Title keywords — highest weight
- Short description keywords — high weight
- Full description keywords — medium weight
- Installs and growth — high weight
- Ratings and reviews — high weight
- Crash rate and ANR rate — negative signal
Keyword Research
- Search for your app’s main function on Google Play
- Note what competitors use in their titles and descriptions
- Use autocomplete: type “task manager” and see suggestions
- Prioritize keywords with high search volume and low competition
ASO Checklist
- Primary keyword in app title
- Secondary keywords in short description
- Natural keyword usage in full description (3-5 times)
- High-quality screenshots with captions
- Feature graphic that communicates value
- At least 2 phone screenshots and tablet screenshots
- Localized listing for target markets
- Regular updates (Google favors actively maintained apps)
Testing Tracks
Google Play offers multiple testing tracks before production:
Internal Testing
- Up to 100 testers
- No review process
- Available within minutes of upload
- Perfect for team testing
Closed Testing
- Up to 2,000 testers (or unlimited via Google Groups)
- No review process
- Invite-only
- Good for beta testers
Open Testing
- Anyone can join
- Listed on Play Store with “Early Access” badge
- Goes through app review
- Great for public beta
Production
- Available to everyone
- Full app review process
- Use staged rollouts to limit exposure
Staged Rollouts
Don’t release to 100% of users immediately. Use staged rollouts:
Internal Testing → Closed Beta → Open Beta → 10% → 25% → 50% → 100%
At each stage:
- Monitor crash rate in Android Vitals
- Check user reviews for issues
- If stable, increase the rollout percentage
- If problems appear, halt the rollout
Managed Publishing
For coordinated launches (e.g., marketing campaign on a specific date):
- Go to Play Console → Your App → Publishing overview
- Enable managed publishing
- Upload your release
- When ready, click “Publish” to make it live
Content Rating
Every app needs a content rating. Without it, your app may be removed.
- Go to Play Console → Your App → App content → Content rating
- Fill out the IARC questionnaire
- Answer honestly about violence, language, user-generated content
- You get a rating for each region (PEGI, ESRB, etc.)
Responding to Reviews
Reviews affect your rating and ASO. Respond to them:
- Negative reviews (1-2 stars): Acknowledge the issue, apologize, offer a fix
- Bug reports: Thank the user, say you are investigating
- Feature requests: Thank them, explain your roadmap
- Positive reviews (4-5 stars): Thank them briefly
Tip: Responding to reviews shows Google that you are an active developer. It also shows potential users that you care.
Publishing Checklist
Before hitting “Publish”:
- App works on Android 8-16 (API 26-36)
- R8 enabled, APK size is reasonable
- Crash rate is below 1% (check with Firebase Crashlytics)
- All permissions are justified
- Data safety form is complete
- Store listing is polished (title, description, screenshots)
- Content rating is assigned
- App signing is configured
- Privacy policy URL is added
- Tested on multiple screen sizes
- Edge-to-edge display works (mandatory for API 35+)
Common Mistakes
1. Losing the Keystore
If you don’t use Play App Signing and lose your keystore, you can never update your app. You have to publish a new app with a new package name. Always use Play App Signing.
2. Ignoring the Data Safety Form
Apps without a completed data safety form can be removed from the store. Fill it out accurately and keep it updated when you add new data collection.
3. Low-Quality Screenshots
Blurry screenshots or screenshots showing placeholder data destroy conversions. Invest time in good screenshots. They are more important than the description.
4. Releasing to 100% Immediately
If your update has a critical bug, all users are affected. Always start with 10% and monitor for 24-48 hours before increasing.
5. Not Testing on Budget Devices
Your app works great on a Pixel 9. But many users have budget devices with 2 GB RAM and old processors. Test on a low-end emulator profile too.
What’s Next?
In this tutorial, you learned:
- Setting up a Google Play Developer account
- App signing with Play App Signing
- Building AABs for distribution
- Writing compelling store listings
- Screenshot strategy and creation
- ASO basics — keywords, title, description
- Testing tracks and staged rollouts
- Content rating and data safety compliance
Next up: Android Tutorial #20: App Performance — Baseline Profiles, Startup, ANR — the final tutorial, where you will optimize your app’s startup time and runtime performance.
Related Articles
- Jetpack Compose Tutorial #25: Publishing Your App — basic publishing overview
- Android Tutorial #16: App Security — R8 for release builds
- Android Tutorial #18: CI/CD — automated deployment to Play Store
- Android Tutorial #20: Performance — Android Vitals monitoring
This is part 19 of the Android Development Tutorial series.