Files
lamp/.agents/skills/expo-deployment/references/play-store.md
Seven 8963f777ee Add PostCSS configuration and skills lock file
- Created a new PostCSS configuration file to integrate Tailwind CSS.
- Added a skills lock file containing various Expo skills with their respective source and computed hashes.
2026-03-09 06:41:01 +07:00

5.1 KiB

Submitting to Google Play Store

Prerequisites

  1. Google Play Console Account - Register at play.google.com/console
  2. App Created in Console - Create your app listing before first submission
  3. Service Account - For automated submissions via EAS

Service Account Setup

1. Create Service Account

  1. Go to Google Cloud Console → IAM & Admin → Service Accounts
  2. Create a new service account
  3. Grant the "Service Account User" role
  4. Create and download a JSON key
  1. Go to Play Console → Setup → API access
  2. Click "Link" next to your Google Cloud project
  3. Under "Service accounts", click "Manage Play Console permissions"
  4. Grant "Release to production" permission (or appropriate track permissions)

3. Configure EAS

Add the service account key path to eas.json:

{
  "submit": {
    "production": {
      "android": {
        "serviceAccountKeyPath": "./google-service-account.json",
        "track": "internal"
      }
    }
  }
}

Store the key file securely and add it to .gitignore.

Environment Variables

For CI/CD, use environment variables instead of file paths:

# Base64-encoded service account JSON
EXPO_ANDROID_SERVICE_ACCOUNT_KEY_BASE64=...

Or use EAS Secrets:

eas secret:create --name GOOGLE_SERVICE_ACCOUNT --value "$(cat google-service-account.json)" --type file

Then reference in eas.json:

{
  "submit": {
    "production": {
      "android": {
        "serviceAccountKeyPath": "@secret:GOOGLE_SERVICE_ACCOUNT"
      }
    }
  }
}

Release Tracks

Google Play uses tracks for staged rollouts:

Track Purpose
internal Internal testing (up to 100 testers)
alpha Closed testing
beta Open testing
production Public release

Track Configuration

{
  "submit": {
    "production": {
      "android": {
        "track": "production",
        "releaseStatus": "completed"
      }
    },
    "internal": {
      "android": {
        "track": "internal",
        "releaseStatus": "completed"
      }
    }
  }
}

Release Status Options

  • completed - Immediately available on the track
  • draft - Upload only, release manually in Console
  • halted - Pause an in-progress rollout
  • inProgress - Staged rollout (requires rollout percentage)

Staged Rollout

{
  "submit": {
    "production": {
      "android": {
        "track": "production",
        "releaseStatus": "inProgress",
        "rollout": 0.1
      }
    }
  }
}

This releases to 10% of users. Increase via Play Console or subsequent submissions.

Submission Commands

# Build and submit to internal track
eas build -p android --profile production --submit

# Submit existing build to Play Store
eas submit -p android --latest

# Submit specific build
eas submit -p android --id BUILD_ID

App Signing

EAS uses Google Play App Signing by default:

  1. First upload: EAS creates upload key, Play Store manages signing key
  2. Play Store re-signs your app with the signing key
  3. Upload key can be reset if compromised

Checking Signing Status

eas credentials -p android

Version Codes

Android requires incrementing versionCode for each upload:

{
  "build": {
    "production": {
      "autoIncrement": true
    }
  }
}

With appVersionSource: "remote", EAS tracks version codes automatically.

First Submission Checklist

Before your first Play Store submission:

  • Create app in Google Play Console
  • Complete app content declaration (privacy policy, ads, etc.)
  • Set up store listing (title, description, screenshots)
  • Complete content rating questionnaire
  • Set up pricing and distribution
  • Create service account with proper permissions
  • Configure eas.json with service account path

Common Issues

"App not found"

The app must exist in Play Console before EAS can submit. Create it manually first.

"Version code already used"

Increment versionCode in app.json or use autoIncrement: true in eas.json.

"Service account lacks permission"

Ensure the service account has "Release to production" permission in Play Console → API access.

"APK not acceptable"

Play Store requires AAB (Android App Bundle) for new apps:

{
  "build": {
    "production": {
      "android": {
        "buildType": "app-bundle"
      }
    }
  }
}

Internal Testing Distribution

For quick internal distribution without Play Store:

# Build with internal distribution
eas build -p android --profile development

# Share the APK link with testers

Or use EAS Update for OTA updates to existing installs.

Monitoring Submissions

# Check submission status
eas submit:list -p android

# View specific submission
eas submit:view SUBMISSION_ID

Tips

  • Start with internal track for testing before production
  • Use staged rollouts for production releases
  • Keep service account key secure - never commit to git
  • Set up Play Console notifications for review status
  • Pre-launch reports in Play Console catch issues before review