Android release to Google Play 技能用于将一次通过的提交构建为已签名的 Android App Bundle,并发布到 Google Play 测试轨道,随后通过分阶段发布到达用户。默认使用 EAS 通道(EAS Build + EAS Submit),也可使用本地通道(Gradle + Play Developer API)。
主要能力:
- 商店 AAB 门禁:检查上传密钥、versionCode、生产包名、target SDK 36、16 KB 页面对齐、64 位库、权限声明、无测试代码和模板值。
- 签名管理:要求使用注册的上传密钥签名,而非调试密钥;Play App Signing 持有应用签名密钥,门禁比较上传证书 SHA-256。
- 密钥安全:密钥和密码不得进入仓库、日志或聊天;EAS 通道将密钥库和服务账号密钥保存在 EAS,本地通道保存在 ~/.android-keys/ 和 ~/.gradle/gradle.properties。
- versionCode 管理:只能递增,不可复用;EAS 远程计数或本地使用固定常量,上传标签为 vX.Y.Z+android.<n>。
- 发布流程:需开发者明确同意后上传到合同指定的测试轨道,生产环境仅通过合同规定的分阶段发布步骤到达,坏版本应暂停而非重建。
- 失败处理:遇到 401/403、应用未找到、API 未启用、草稿应用、已用版本号或缺少声明时停止并询问,不重试。
使用方式:
- 首次发布前阅读 references/human-steps.md 和 references/signing-and-keys.md,向开发者一次性询问所有缺失的人工步骤。
- 安装模板(templates/contracts/android-release.json + schema;本地通道另需 templates/scripts/release-android/ 等)。
- 运行 node ${CLAUDE_SKILL_DIR}/scripts/check-play-release-setup.mjs . 检查设置,直到 RESULT: PASS;商店构建前加 --release。
- 在开发者同意后构建:EAS 使用 eas build --platform android --profile production --non-interactive --freeze-credentials --json,或本地 npm run release:android -- build。
- 门禁:node ${CLAUDE_SKILL_DIR}/scripts/check-store-aab.mjs . --aab <bundle> --version-code <n> --stamp build/release-android/aab-gate.json 直到 PASS。
- 上传:eas submit --platform android --profile production --path build/release-android/app-release.aab --non-interactive 或 npm run release:android -- upload;然后打注释标签。
- 按 references/tracks-and-rollout.md 分阶段发布。
- 失败时参考 references/failure-playbook.md。
适用场景:React Native/Expo 应用发布到 Google Play 的测试轨道及分阶段生产发布;需要严格签名、版本控制和门禁校验的发布流程。
限制:需要开发者明确同意才能上传;不涉及 iOS 发布(iOS 对应 ios-release-testflight);不处理应用内购买、AdMob 或 OTA 更新等具体功能;密钥和密码不得暴露;某些步骤需要人工操作(如账号、应用创建、服务账号等)。