Subchapter 3.3
references/play-store.mdMarkdown5 KBView on GitHub
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.
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 fileThen reference in eas.json:
{
"submit": {
"production": {
"android": {
"serviceAccountKeyPath": "@secret:GOOGLE_SERVICE_ACCOUNT"
}
}
}
}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 |
{
"submit": {
"production": {
"android": {
"track": "production",
"releaseStatus": "completed"
}
},
"internal": {
"android": {
"track": "internal",
"releaseStatus": "completed"
}
}
}
}completed - Immediately available on the trackdraft - Upload only, release manually in Consolehalted - Pause an in-progress rolloutinProgress - Staged rollout (requires rollout percentage){
"submit": {
"production": {
"android": {
"track": "production",
"releaseStatus": "inProgress",
"rollout": 0.1
}
}
}
}This releases to 10% of users. Increase via Play Console or subsequent submissions.
# 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_IDEAS uses Google Play App Signing by default:
eas credentials -p androidAndroid requires incrementing versionCode for each upload:
{
"build": {
"production": {
"autoIncrement": true
}
}
}With appVersionSource: "remote", EAS tracks version codes automatically.
Before your first Play Store submission:
eas.json with service account pathThe app must exist in Play Console before EAS can submit. Create it manually first.
Increment versionCode in app.json or use autoIncrement: true in eas.json.
Ensure the service account has “Release to production” permission in Play Console → API access.
Play Store requires AAB (Android App Bundle) for new apps:
{
"build": {
"production": {
"android": {
"buildType": "app-bundle"
}
}
}
}For quick internal distribution without Play Store:
# Build with internal distribution
eas build -p android --profile development
# Share the APK link with testersOr use EAS Update for OTA updates to existing installs.
# Check submission status
eas submit:list -p android
# View specific submission
eas submit:view SUBMISSION_IDinternal track for testing before production