Google Play Deployment
Deploy your Android app to the Google Play Store
Google Play Deployment
This guide walks you through building your Android app and shipping it to Google Play, from account setup to production release.
Quick Start
Already have a Google Play Developer Account and your app created in the Play Console? Run these commands:
# 1. Build production AAB
yarn build:prod
# 2. Submit to Google Play
eas submit --platform android --profile productionEAS handles keystore management and upload automatically. Your build will appear in the Play Console within minutes.
New personal accounts must complete a closed test with 20 testers for 14 days before you can publish to production. See Part 2 for details.
Full Guide
Prerequisites
Before you start, make sure you have:
- Google Play Developer Account ($25 one-time fee), play.google.com/console
- Gmail account for Google Play Console access
- App built and tested locally with
yarn android - App assets ready:
- Hi-res icon (512x512 PNG)
- Feature graphic (1024x500 PNG)
- At least 2 phone screenshots
- Short description (80 chars) and full description (4,000 chars)
- Privacy Policy URL (required for all apps)
Part 1: Google Play Console Account Setup
Step 1: Create Your Developer Account
- Visit play.google.com/console/signup
- Sign in with your Google account
- Accept the Developer Distribution Agreement
- Pay the $25 one-time registration fee
- Complete your account details:
- Developer name (displayed on Play Store)
- Contact email and phone
- Website (optional)
- If prompted, verify your identity with a government-issued ID
Organization accounts require additional verification (D-U-N-S number, business documents). This can take 1–2 weeks. Personal accounts are approved almost instantly.
Step 2: Create Your App
- In the Play Console, click "Create app"
- Fill in the details:
| Field | Value |
|---|---|
| App name | Your app name (max 50 characters) |
| Default language | Your primary language |
| App or game | App (usually) |
| Free or paid | Select carefully, you cannot change from Paid to Free later |
- Accept the declarations (Developer Program Policies, US Export Laws)
- Click "Create app"
Step 3: Complete Store Listing
Navigate to Grow → Store presence → Main store listing and fill in:
| Field | Details |
|---|---|
| Short description | Max 80 characters, appears on the Play Store listing |
| Full description | Max 4,000 characters, full app description |
| App icon | 512x512 PNG, 32-bit, up to 1MB |
| Feature graphic | 1024x500 PNG or JPEG, displayed at the top of your listing |
| Phone screenshots | Min 2, max 8. JPEG or PNG, 16:9 or 9:16 aspect ratio |
| Tablet screenshots | Required if your app supports tablets |
Screenshot tip: Use AppMockUp or Screenshots Pro to create professional screenshots with device frames and marketing text.
Step 4: Complete Setup Checklist
Google requires you to complete several setup steps before publishing. Navigate to Dashboard and work through each item:
- App access, Does your app require login? If yes, provide test credentials.
- Ads, Does your app contain ads? Select Yes or No.
- Content rating, Complete the IARC questionnaire (takes 5 minutes).
- Target audience, Select age groups your app targets.
- News app, Is this a news app? Usually No.
- Data safety, Declare what data your app collects, shares, and secures.
- Government apps, Is this a government app? Usually No.
Data safety is the most involved step. You need to declare every type of data your app collects (account info, location, app activity, etc.) and whether it's shared with third parties. Be thorough, inaccurate declarations can lead to app removal.
Part 2: Testing Tracks (CRITICAL)
Google has a strict testing pipeline, especially for new personal developer accounts.
Testing Track Overview
| Track | Review Required | Max Testers | Use Case |
|---|---|---|---|
| Internal testing | No | 100 | Quick builds, team testing |
| Closed testing | Yes (hours) | Unlimited (by invite) | Beta testing, the "20 tester" requirement |
| Open testing | Yes (days) | Unlimited (public) | Public beta |
| Production | Yes (days) | Everyone | Public release |
The "20 Testers" Rule
New personal developer accounts must run a closed test with at least 20 opted-in testers for a minimum of 14 consecutive days before they can apply for production access.
This is Google's way to ensure app quality. Here's how to handle it:
- Go to Testing → Closed testing → Create track
- Name your track (e.g., "Alpha")
- Create a testers list, add at least 20 email addresses
- Upload your first build (see Part 3)
- Share the opt-in link with your testers
- Testers must:
- Click the opt-in link
- Install the app from the Play Store
- Keep it installed for 14 days
Don't skip this step. Google will not let you publish to production without completing the closed testing requirement. Start recruiting testers early, friends, family, colleagues, or online communities.
Tips for Recruiting Testers
- Ask friends and family
- Post in relevant Reddit communities or Discord servers
- Use beta testing platforms like BetaFamily
- Join communities of other indie developers who need testers (tester swaps)
Part 3: Build & Submit
Step 1: Configure Your Project
Ensure your app.json has the correct Android configuration:
{
"expo": {
"name": "Your App Name",
"slug": "your-app-slug",
"version": "1.0.0",
"android": {
"package": "com.yourcompany.yourapp",
"versionCode": 1,
"adaptiveIcon": {
"foregroundImage": "./assets/adaptive-icon.png",
"backgroundColor": "#FFFFFF"
},
"permissions": [
"CAMERA",
"READ_EXTERNAL_STORAGE"
]
}
}
}Minimize permissions! Only include permissions your app actually uses. Requesting unnecessary permissions (like RECORD_AUDIO or ACCESS_FINE_LOCATION) triggers stricter review and can lead to rejection.
Step 2: Configure EAS Submit
Add your Google Play service account key to eas.json:
{
"submit": {
"production": {
"android": {
"serviceAccountKeyPath": "./google-play-service-account.json",
"track": "internal"
}
}
}
}How to get the service account key:
- Go to Google Cloud Console
- Create a project (or select existing)
- Enable the Google Play Android Developer API
- Create a Service Account with role Service Account User
- Generate a JSON key and save it as
google-play-service-account.jsonin your project root - In the Play Console → Setup → API access → link the service account and grant Release manager permissions
Add to .gitignore! Never commit your service account key. Add google-play-service-account.json to .gitignore. For CI/CD, store it as an EAS Secret or GitHub Secret.
Step 3: Run the Production Build
yarn build:prodThis triggers an EAS cloud build that:
- Compiles your app for Android
- Signs it with your upload keystore (EAS manages this automatically)
- Generates an
.aab(Android App Bundle) file - Stores it on your Expo dashboard
The build typically takes 10–15 minutes. Monitor progress at expo.dev.
First build? EAS will generate and manage your keystore automatically. It stores it securely on Expo's servers. You can download it later with eas credentials if needed.
Step 4: Upload to Google Play
Choose one of these methods:
Option A: EAS Submit (Recommended)
eas submit --platform android --profile productionEAS will upload your .aab directly to the Play Console track specified in your eas.json.
Option B: Manual Upload
- Download the
.aabfrom your Expo dashboard → your project → Builds - Go to Play Console → Testing → select your track (e.g., Closed testing)
- Click "Create new release"
- Drag and drop (or browse) to upload your
.aabfile - Add release notes (what's new in this version)
- Click "Review release" → "Start rollout"
Part 4: From Testing to Production
Once you've completed the 20-tester closed testing requirement (14 days), you can apply for production access.
Apply for Production Access
- Go to Dashboard in the Play Console
- You should see a notification: "You can now publish to production"
- Go to Production → Create new release
- Upload your latest
.aab(or promote from a testing track) - Add release notes
- Click "Review release" → "Start rollout to production"
Staged Rollouts
Google allows you to release to a percentage of users first:
| Rollout % | Use Case |
|---|---|
| 5–10% | Catch critical bugs early |
| 25–50% | Validate stability with more users |
| 100% | Full release |
You can increase the rollout percentage at any time from the Production tab.
Review Timeline
| Track | Review Duration |
|---|---|
| Internal testing | No review, available immediately |
| Closed testing | Hours to 1 day |
| Open testing | 1–3 days |
| Production (first release) | Up to 7 days |
| Production (updates) | 1–3 days |
Common Issues
| Issue | Solution |
|---|---|
| "You need 20 testers" | Complete the closed testing requirement. 20 unique testers must opt in and stay active for 14 days. |
| Keystore errors | EAS manages your keystore automatically. Run eas credentials to verify or reset. |
| Version code conflict | Increment versionCode in app.json for every new upload. Each build must have a unique, higher version code. |
| "Deobfuscation file not found" | Not a blocker, Google recommends uploading a mapping file for crash reports, but it's optional for Expo builds. |
| Permissions warning | Remove unused permissions from app.json. Google flags apps that request sensitive permissions without justification. |
| Data safety rejection | Review your data safety declaration carefully. Make sure you declare all third-party SDKs (Firebase, Sentry, RevenueCat) and their data collection. |
| App rejected for policy | Read the rejection email carefully. Common issues: missing privacy policy, misleading description, or restricted content. |
Next Steps
- App Store Deployment, Deploy your iOS version
- CI/CD Setup, Automate builds with GitHub Actions