SuperAPI AI 工具集

android-build-sign

部署与运维

查看项目

更新于 10-16 18:29

技能介绍

用途

该技能把 Android 源码树变成已签名、已验证的发布产物,并停在磁盘上的产物阶段——它不会上传到 Play。配套命令 /mobile-release:ship-beta 可端到端运行并上传结果,/mobile-release:bootstrap 可从零创建密钥库、signingConfigs 和 CI 工作流。密钥库创建是受控步骤,具体代理可无人值守执行的范围见 skills/release-automation。

主要能力

  • 发现项目:驱动 Gradle wrapper(而非系统 gradle),列出模块与变体任务,按顺序读取 settings.gradle[.kts]、gradle/libs.versions.toml 或根构建文件、应用模块的 build.gradle[.kts],获取 applicationId、versionCode、versionName、minSdk/targetSdk/compileSdk、signingConfigs、buildTypes、productFlavors、isMinifyEnabled 等信息。若安装了 Google 的 Android CLI,可用 android describe --project_dir=. 定位产物路径。
  • 版本管理:按 references/versioning.md 设置 versionCode 与 versionName,versionCode 必须严格高于该包在任何轨道上已上传的所有 code。
  • 密钥库:确认上传密钥库存在,不存在则创建,并保持在仓库之外。
  • 签名配置:按 references/signing-configs.md 将 signingConfigs 接入 release 构建类型,覆盖 Kotlin DSL 与 Groovy,以及四种提供凭据的方式。
  • 目标 API 级别:构建前确认满足要求。
  • 构建:使用 ./gradlew bundleRelease 生成 AAB,或 ./gradlew clean assembleRelease 生成 APK;收集产物、R8 mapping 文件和原生调试符号。
  • 验证:AAB 用 bundletool,APK 用 apksigner verify --print-certs;没有证书指纹不得报告构建完成。
  • Play App Signing:涉及首次发布、上传密钥丢失、密钥轮换时,参考 references/play-app-signing.md。
  • CI:使用 references/github-actions.md 中的工作流。
  • 故障排查:任何失败先查 references/troubleshooting.md,再改构建。

使用方式

发现项目:

ls gradle/wrapper/gradle-wrapper.properties && ./gradlew --version
chmod +x ./gradlew
./gradlew projects
./gradlew :app:tasks --all
./gradlew :app:tasks --all | grep -iE '^(assemble|bundle)[A-Z]'

创建上传密钥库:

mkdir -p ~/.android-keystores
keytool -genkeypair -v \
  -keystore ~/.android-keystores/myapp-upload.jks \
  -storetype PKCS12 \
  -alias upload \
  -keyalg RSA -keysize 2048 \
  -validity 10000 \
  -dname "CN=My App, OU=Mobile, O=My Company, L=Berlin, C=DE"

导出证书用于在 Play 注册:

keytool -export -rfc \
  -keystore ~/.android-keystores/myapp-upload.jks \
  -alias upload \
  -file upload-certificate.pem

构建:

./gradlew clean bundleRelease      # .aab — Play 所需
./gradlew clean assembleRelease    # .apk — 侧载、其他商店、设备冒烟测试

带风味的项目使用变体名,如 ./gradlew :app:bundleProdRelease。

适用场景

  • 需要从源码树生成已签名、可上传的 Android 发布产物。
  • 需要在 CI 中自动化 Android 发布构建与签名。
  • 需要管理 versionCode/versionName、上传密钥库、signingConfigs 与目标 API 级别。
  • 需要验证产物签名指纹并收集 R8 mapping 与原生调试符号。

限制与注意事项

  • 该技能不上传到 Play,也不触碰任何轨道。
  • 密钥库绝不进入仓库;应保存在 ~/.android-keystores/、密码管理器或 CI secret 中。
  • -validity 10000 约 27 年;Play 要求密钥至少有效至 2033 年 10 月 22 日,建议 25 年以上。
  • 上传密钥丢失可通过 Play App Signing 恢复;未加入 Play App Signing 的应用签名密钥丢失则完全不可恢复,必须以新包名重新发布。
  • 仅在脚本中从 secret manager 取值时才传 -storepass/-keypass,命令行传参会进入 shell 历史和进程表。
  • 目标 API 级别要求(自 2026 年 8 月 31 日起):手机/平板/默认 Android 16(API 36);Wear OS、Android Automotive OS 为 Android 15(API 35);Android TV、Android XR 为 Android 14(API 34)。未更新的已发布应用需目标 Android 15(API 35)或更高,才能在运行更新 OS 的设备上对新用户可见。可通过 Play Console 表单按应用申请延期至 2026 年 11 月 1 日。当前发布手机/平板应用应设 targetSdk = 36、compileSdk = 36。
  • 2021 年 8 月后创建的应用必须发布 app bundle,发布 AAB 需要 Play App Signing。
  • 该技能研究日期为 2026-08-05,内容几乎全部来自一手来源;唯一无法确认的声明在 references/build-outputs.md 末尾标注。作者环境无 Android SDK build-tools,未实际执行,首次真实运行应视为测试,以工具输出为准。
  • 输出格式要求报告产物、签名身份及上传前所需数字;没有证书指纹不得声称构建成功,并明确说明未完成的事项。