gplay-release-flow
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseRelease flow (Internal, Beta, Production)
发布流程(内部测试、Beta测试、正式发布)
Use this skill when you need to get a new build onto Google Play Store.
当你需要将新构建包上传至Google Play商店时,可以使用本技能。
Preconditions
前置条件
- Ensure credentials are set (or
gplay auth loginenv var).GPLAY_SERVICE_ACCOUNT - Build must be an AAB (App Bundle) or APK.
- Version code must be higher than previous releases.
- Service account needs "Release Manager" permission in Play Console.
- 确保已配置凭证(执行或设置
gplay auth login环境变量)。GPLAY_SERVICE_ACCOUNT - 构建包必须为AAB(App Bundle)或APK格式。
- 版本号必须高于之前的发布版本。
- 服务账号需在Play Console中拥有「发布管理员」权限。
Android Release
Android应用发布
Preferred end-to-end commands
推荐的端到端命令
Internal track (for internal testing):
bash
gplay release \
--package com.example.app \
--track internal \
--bundle app-release.aabBeta track (for beta testers):
bash
gplay release \
--package com.example.app \
--track beta \
--bundle app-release.aab \
--release-notes @release-notes.jsonProduction with staged rollout (gradual release):
bash
gplay release \
--package com.example.app \
--track production \
--bundle app-release.aab \
--release-notes @release-notes.json \
--rollout 10Dry run (preview the release without executing):
bash
gplay release \
--package com.example.app \
--track production \
--bundle app-release.aab \
--dry-run内部测试渠道(用于内部测试):
bash
gplay release \
--package com.example.app \
--track internal \
--bundle app-release.aabBeta测试渠道(用于Beta测试人员):
bash
gplay release \
--package com.example.app \
--track beta \
--bundle app-release.aab \
--release-notes @release-notes.json分阶段正式发布(逐步推广):
bash
gplay release \
--package com.example.app \
--track production \
--bundle app-release.aab \
--release-notes @release-notes.json \
--rollout 10模拟发布(预览发布流程但不实际执行):
bash
gplay release \
--package com.example.app \
--track production \
--bundle app-release.aab \
--dry-runRelease with metadata (listings and screenshots)
带元数据的发布(商店列表与截图)
Include store listings from a directory:
bash
gplay release \
--package com.example.app \
--track production \
--bundle app-release.aab \
--listings-dir ./metadata \
--screenshots-dir ./metadataSkip metadata or screenshots:
bash
undefined从目录同步商店列表:
bash
gplay release \
--package com.example.app \
--track production \
--bundle app-release.aab \
--listings-dir ./metadata \
--screenshots-dir ./metadata跳过元数据或截图上传:
bash
undefinedUpload bundle only, skip metadata sync
仅上传构建包,跳过元数据同步
gplay release
--package com.example.app
--track production
--bundle app-release.aab
--skip-metadata
--package com.example.app
--track production
--bundle app-release.aab
--skip-metadata
gplay release
--package com.example.app
--track production
--bundle app-release.aab
--skip-metadata
--package com.example.app
--track production
--bundle app-release.aab
--skip-metadata
Upload bundle and metadata, skip screenshots
上传构建包和元数据,跳过截图
gplay release
--package com.example.app
--track production
--bundle app-release.aab
--listings-dir ./metadata
--skip-screenshots
--package com.example.app
--track production
--bundle app-release.aab
--listings-dir ./metadata
--skip-screenshots
**Combine listings and screenshots directories**:
```bash
gplay release \
--package com.example.app \
--track beta \
--bundle app-release.aab \
--listings-dir ./metadata/listings \
--screenshots-dir ./metadata/images \
--release-notes @release-notes.jsongplay release
--package com.example.app
--track production
--bundle app-release.aab
--listings-dir ./metadata
--skip-screenshots
--package com.example.app
--track production
--bundle app-release.aab
--listings-dir ./metadata
--skip-screenshots
**分开指定列表和截图目录**:
```bash
gplay release \
--package com.example.app \
--track beta \
--bundle app-release.aab \
--listings-dir ./metadata/listings \
--screenshots-dir ./metadata/images \
--release-notes @release-notes.jsonManual sequence (when you need more control)
手动分步流程(需要更多控制权时)
-
Create edit session:bash
EDIT_ID=$(gplay edits create --package com.example.app | jq -r '.id') -
Upload bundle:bash
gplay bundles upload \ --package com.example.app \ --edit $EDIT_ID \ --file app-release.aab -
Update track:bash
gplay tracks update \ --package com.example.app \ --edit $EDIT_ID \ --track production \ --json @track-config.json -
Validate edit:bash
gplay edits validate --package com.example.app --edit $EDIT_ID -
Commit edit (publishes changes):bash
gplay edits commit --package com.example.app --edit $EDIT_ID
-
创建编辑会话:bash
EDIT_ID=$(gplay edits create --package com.example.app | jq -r '.id') -
上传构建包:bash
gplay bundles upload \ --package com.example.app \ --edit $EDIT_ID \ --file app-release.aab -
更新发布渠道:bash
gplay tracks update \ --package com.example.app \ --edit $EDIT_ID \ --track production \ --json @track-config.json -
验证编辑内容:bash
gplay edits validate --package com.example.app --edit $EDIT_ID -
提交编辑(发布变更):bash
gplay edits commit --package com.example.app --edit $EDIT_ID
Track Promotion
渠道版本推广
Promote a release from one track to another:
bash
undefined将版本从一个渠道推广到另一个渠道:
bash
undefinedPromote from internal to beta
从内部测试渠道推广到Beta测试渠道
gplay promote
--package com.example.app
--from internal
--to beta
--package com.example.app
--from internal
--to beta
gplay promote
--package com.example.app
--from internal
--to beta
--package com.example.app
--from internal
--to beta
Promote from beta to production with 25% rollout
从Beta测试渠道推广到正式渠道,分25%逐步发布
gplay promote
--package com.example.app
--from beta
--to production
--rollout 25
--package com.example.app
--from beta
--to production
--rollout 25
undefinedgplay promote
--package com.example.app
--from beta
--to production
--rollout 25
--package com.example.app
--from beta
--to production
--rollout 25
undefinedStaged Rollout Management
分阶段发布管理
Start with 10% rollout:
bash
gplay release \
--package com.example.app \
--track production \
--bundle app.aab \
--rollout 10Increase to 50%:
bash
gplay rollout update \
--package com.example.app \
--track production \
--rollout 50Halt rollout (pause distribution):
bash
gplay rollout halt --package com.example.app --track productionResume rollout:
bash
gplay rollout resume --package com.example.app --track productionComplete rollout (release to 100%):
bash
gplay rollout complete --package com.example.app --track production初始10%比例发布:
bash
gplay release \
--package com.example.app \
--track production \
--bundle app.aab \
--rollout 10提升至50%比例:
bash
gplay rollout update \
--package com.example.app \
--track production \
--rollout 50暂停发布:
bash
gplay rollout halt --package com.example.app --track production恢复发布:
bash
gplay rollout resume --package com.example.app --track production完成全量发布(推广至100%用户):
bash
gplay rollout complete --package com.example.app --track productionRelease Notes Format
发布说明格式
JSON format (multi-locale)
JSON格式(多语言)
release-notes.jsonjson
{
"en-US": "Bug fixes and performance improvements",
"es-ES": "Correcciones de errores y mejoras de rendimiento",
"fr-FR": "Corrections de bugs et améliorations des performances"
}release-notes.jsonjson
{
"en-US": "Bug fixes and performance improvements",
"es-ES": "Correcciones de errores y mejoras de rendimiento",
"fr-FR": "Corrections de bugs et améliorations des performances"
}Plain text format (single locale)
纯文本格式(单语言)
You can also provide release notes as plain text for a single locale:
bash
gplay release \
--package com.example.app \
--track beta \
--bundle app.aab \
--release-notes "Bug fixes and performance improvements" \
--release-notes-locale en-USOr from a text file:
bash
gplay release \
--package com.example.app \
--track beta \
--bundle app.aab \
--release-notes @release-notes.txt \
--release-notes-locale en-US你也可以为单一语言提供纯文本格式的发布说明:
bash
gplay release \
--package com.example.app \
--track beta \
--bundle app.aab \
--release-notes "Bug fixes and performance improvements" \
--release-notes-locale en-US或从文本文件读取:
bash
gplay release \
--package com.example.app \
--track beta \
--bundle app.aab \
--release-notes @release-notes.txt \
--release-notes-locale en-USRelease Flags Reference
发布参数参考
| Flag | Description |
|---|---|
| App package name (required) |
| Target track (required) |
| Path to AAB file (required) |
| Release notes (JSON file with |
| Locale for plain text release notes (e.g., |
| Rollout percentage (1-100) |
| Directory containing store listings to sync |
| Directory containing screenshots to upload |
| Skip metadata/listings sync during release |
| Skip screenshots upload during release |
| Preview the release without executing |
| Output format ( |
| 参数 | 说明 |
|---|---|
| 应用包名(必填) |
| 目标发布渠道(必填) |
| AAB文件路径(必填) |
| 发布说明(带 |
| 纯文本发布说明的语言区域(例如 |
| 发布比例(1-100) |
| 包含待同步商店列表的目录 |
| 包含待上传截图的目录 |
| 发布时跳过元数据/商店列表同步 |
| 发布时跳过截图上传 |
| 预览发布流程但不实际执行 |
| 输出格式( |
Pre-release Checklist
发布前检查清单
Before releasing, verify:
- Version code is incremented
- AAB/APK is signed with correct keystore
- ProGuard/R8 mapping files uploaded (for crash reports)
- Release notes written for all locales
- Testing completed on internal/beta track
- Service account has correct permissions
- Dry run passes:
gplay release ... --dry-run
发布前请确认:
- 版本号已递增
- AAB/APK已使用正确密钥库签名
- 已上传ProGuard/R8映射文件(用于崩溃报告)
- 已为所有语言区域编写发布说明
- 已在内部/Beta渠道完成测试
- 服务账号拥有正确权限
- 模拟发布通过:
gplay release ... --dry-run
Common Release Strategies
常见发布策略
Strategy 1: Internal -> Beta -> Production
bash
undefined策略1:内部测试 → Beta测试 → 正式发布
bash
undefinedWeek 1: Internal
第1周:内部测试
gplay release --package com.example.app --track internal --bundle app.aab
gplay release --package com.example.app --track internal --bundle app.aab
Week 2: Beta (after testing)
第2周:Beta测试(测试完成后)
gplay promote --package com.example.app --from internal --to beta
gplay promote --package com.example.app --from internal --to beta
Week 3: Production with staged rollout
第3周:分阶段正式发布
gplay promote --package com.example.app --from beta --to production --rollout 10
gplay rollout update --package com.example.app --track production --rollout 50 # Day 2
gplay rollout complete --package com.example.app --track production # Day 7
**Strategy 2: Direct to Production with Staged Rollout**
```bashgplay promote --package com.example.app --from beta --to production --rollout 10
gplay rollout update --package com.example.app --track production --rollout 50 # 第2天
gplay rollout complete --package com.example.app --track production # 第7天
**策略2:直接分阶段正式发布**
```bashDay 1: 10%
第1天:10%比例
gplay release --package com.example.app --track production --bundle app.aab --rollout 10
gplay release --package com.example.app --track production --bundle app.aab --rollout 10
Day 2: 25%
第2天:25%比例
gplay rollout update --package com.example.app --track production --rollout 25
gplay rollout update --package com.example.app --track production --rollout 25
Day 3: 50%
第3天:50%比例
gplay rollout update --package com.example.app --track production --rollout 50
gplay rollout update --package com.example.app --track production --rollout 50
Day 7: 100%
第7天:全量发布
gplay rollout complete --package com.example.app --track production
**Strategy 3: Full release with metadata and dry-run verification**
```bashgplay rollout complete --package com.example.app --track production
**策略3:带元数据的完整发布+模拟验证**
```bash1. Dry run to verify everything
1. 模拟发布以验证所有内容
gplay release
--package com.example.app
--track production
--bundle app.aab
--listings-dir ./metadata
--screenshots-dir ./metadata
--release-notes @release-notes.json
--rollout 10
--dry-run
--package com.example.app
--track production
--bundle app.aab
--listings-dir ./metadata
--screenshots-dir ./metadata
--release-notes @release-notes.json
--rollout 10
--dry-run
gplay release
--package com.example.app
--track production
--bundle app.aab
--listings-dir ./metadata
--screenshots-dir ./metadata
--release-notes @release-notes.json
--rollout 10
--dry-run
--package com.example.app
--track production
--bundle app.aab
--listings-dir ./metadata
--screenshots-dir ./metadata
--release-notes @release-notes.json
--rollout 10
--dry-run
2. Execute the release
2. 执行正式发布
gplay release
--package com.example.app
--track production
--bundle app.aab
--listings-dir ./metadata
--screenshots-dir ./metadata
--release-notes @release-notes.json
--rollout 10
--package com.example.app
--track production
--bundle app.aab
--listings-dir ./metadata
--screenshots-dir ./metadata
--release-notes @release-notes.json
--rollout 10
undefinedgplay release
--package com.example.app
--track production
--bundle app.aab
--listings-dir ./metadata
--screenshots-dir ./metadata
--release-notes @release-notes.json
--rollout 10
--package com.example.app
--track production
--bundle app.aab
--listings-dir ./metadata
--screenshots-dir ./metadata
--release-notes @release-notes.json
--rollout 10
undefinedNotes
注意事项
- Always use to verify flags for the exact command.
--help - Use for human-readable output; default is JSON.
--output table - For CI/CD, use environment variable.
GPLAY_SERVICE_ACCOUNT - Upload deobfuscation files after each release for crash symbolication.
- Use in CI to validate releases before actual deployment.
--dry-run
- 始终使用查看具体命令的参数说明。
--help - 使用获取易读的人类友好型输出;默认输出格式为JSON。
--output table - 在CI/CD流程中,使用环境变量配置凭证。
GPLAY_SERVICE_ACCOUNT - 每次发布后上传反混淆文件,用于崩溃符号解析。
- 在CI流程中使用验证发布内容后再执行实际部署。
--dry-run