CI 集成

GitHub Actions Android 注册检查:保护密钥并设置发布关卡

GitHub Actions 可在 APK 签名完成后、推广到商店之前查询生产包名与证书。把 Google API 密钥放在受保护的 Secrets 中,按返回 state 决定是否阻止发布;暂时服务故障应与未注册、签名不匹配分开处理。

指南摘要

将 GitHub Actions Android 注册检查接入签名后的发布流程,保护 Google API 密钥,区分业务状态与可重试的服务错误。

适合人群: 用 GitHub Actions 构建、签名和发布 Android 应用的团队。

发布检查步骤

  1. 从目标 release 变体获得正式 applicationId。
  2. 从已签名产物读取公开证书 SHA-256。
  3. 在受保护的发布 job 中调用官方 API,或使用团队受控服务。
  4. 未注册或证书不匹配时停止推广,人工放行须有明确政策及证据。

关键事实

秘密凭据Google API 密钥
身份输入包名与公开证书 SHA-256
检查时机签名完成后、商店推广前
注意事项

不要把 API 密钥、keystore 密码或私钥打印进日志。公共证书指纹不是私钥,但也应按团队的发布证据策略保留。

详细说明

在受保护的发布 job 中解析状态

把 API 密钥保存在 GitHub Actions Secrets,限制其可调用的 API,避免让不受信任的 PR 代码读取发布凭据。固定第三方 Actions 版本,并只保存必要的状态记录。

下面示例展示包名查询和 REGISTERED 关卡,尚未包含证书参数。要验证签名,需从真实产物取得 SHA-256,并按官方 Status API 的 certificateFingerprint 参数扩展请求;示例包名也必须替换为目标 release 变体。

用 jq 读取 state,不依赖自然语言错误提示。NOT_REGISTERED 或证书不匹配需要人工整改;RESOURCE_EXHAUSTED、INTERNAL 和 UNAVAILABLE 才按配额与服务情况进行有上限的指数退避。

  • 禁止 echo API 密钥。
  • 只有可信发布上下文可以访问凭据。
  • 输出中保留状态与时间,不附带私有签名材料。
GitHub Actions 包名检查步骤
- name: Check Android registration
  env:
    API_KEY: ${{ secrets.ANDROID_DEVELOPER_ID_API_KEY }}
    PACKAGE_NAME: com.example.app
  run: |
    curl --fail --silent --show-error \
      -H "X-Goog-Api-Key: $API_KEY" \
      "https://androiddeveloperidstatus.googleapis.com/v1/packages/$PACKAGE_NAME/packageRegistrationStatus:check" \
      | tee status.json
    test "$(jq -r .state status.json)" = "REGISTERED"

填入正式包名;要核对实际 APK 的签名,再补充该产物的公开证书 SHA-256。查询用于发现登记问题,不能代替商店审核。

运行状态检测 →

常见问题

CI 可以直接调用 PkgReady 浏览器接口吗?

不应这样集成。CI 应使用团队自己管理的 Google 项目和受保护密钥调用官方服务端 API,以便明确配额、权限和日志责任。浏览器检查流程不承担匿名自动化批量服务。

哪些情况应该阻止发布?

未注册或证书不匹配应停止推广并进入整改流程。配额或服务错误则是基础设施问题,需要有限重试和清楚的失败说明;不能将查询失败当作注册通过,也不能无限循环。

来源与审核

最后审核: