跳转至正文

Android 签名

Android Keystore 生成器

无需 Android Studio 或 keytool,几秒钟内即可在线生成 Android keystore。获取 PKCS#12 发布版 keystore、PEM 证书以及 SHA-1 和 SHA-256 指纹,直接用于 Gradle、Capacitor、fastlane、CI 和 Google Play。

容器

PKCS#12

密钥

RSA 2048, SHA-256

指纹

SHA-1 和 SHA-256

发布检查清单

  1. 1. 请选择将长期用于此 App 的 alias 和密码。
  2. 2. 下载 keystore 并将元数据保存到您的密钥管理器中。
  3. 3. 在 Gradle 或您的 CI 环境中配置相同的 alias 和密码。
  4. 4. 保持 upload key 稳定,避免后续 Play 发布出问题。

输入

Keystore 详情

填写要嵌入签名证书的主体信息,并选择一个固定的 alias。

输出

生成的 Android 签名 Bundle

生成后,您将获得可下载的 keystore 文件,以及用于应用商店配置或 OAuth 集成的证书导出文件和指纹信息。

生成签名 Bundle 以在此处查看别名、指纹并下载文件。

基础知识

什么是 Android keystore?

Android keystore 是一个受密码保护的文件,其中包含用于签署 App 的私钥和证书。每个 APK 和 Android App Bundle 在安装或发布前都必须经过签名;此外,Android 仅接受使用与已安装版本相同密钥进行签名的更新。

这使得 keystore 成为项目中最重要的文件之一。在使用 Play App Signing 时,它充当您的 上传密钥,Google 会在重新签署您的 App 之前对其进行校验。如果不使用 Play App Signing,它就是 应用签名密钥 本身,一旦丢失,您将无法再更新该 App。

此生成器会创建一个 PKCS#12 (.p12) keystore,包含 RSA 2048 位密钥和 SHA-256 证书,输出结果与 keytool Android Studio 签名向导一致,默认有效期为 25 年,符合 Google Play 要求。

安全与隐私

Keystore 生成原理

  • Keystore 由无状态的 Capgo 端点通过 HTTPS 按需创建,并直接以下载形式返回给你的浏览器。
  • 响应会带有 Cache-Control: no-store。私钥、密码和文件绝不会被保存到数据库,也不会在响应返回后保留。
  • Keystore 在 PKCS#12 容器内使用 AES-256 加密,并由你的密码保护。
  • 无需账号或注册,请求会限流以防止滥用。

需要密钥永不离开你的电脑?请在本地运行等效的 keytool 命令。它会生成同类型的 keystore。

等效的 keytool 命令
keytool -genkeypair -v \
  -storetype PKCS12 \
  -keystore release.p12 \
  -alias release \
  -keyalg RSA -keysize 2048 \
  -validity 9125 \
  -dname "CN=Jane Doe, O=Acme Mobile, C=DE"

分步指南

如何在线生成 Android keystore

只需六步,就能从空白表单开始,在 Google Play 上发布已签名版本。前三步用时不到一分钟。

  1. 第 1 步

    输入证书详情

    填写您的全名、邮箱和两位字母的国家代码 code。组织、部门、城市和州为选填,仅会显示在证书主题中。

  2. 第 2 步

    选择别名、有效期和密码

    选择一个简单的别名(如 release 或 upload),保留 25 年有效期,并设置至少 8 个字符的强密码。继续前请务必把这三项都记下来。

  3. 第 3 步

    生成并下载 keystore

    选择 Generate keystore,然后下载 .p12 keystore 和 PEM 证书。从结果面板中复制 SHA-1 和 SHA-256 指纹。

  4. 步骤 4

    备份 keystore 和凭据

    将 keystore 文件、别名和密码一起存放在密码管理器或密钥管理器中。切勿将 keystore 提交到 Git。

  5. 步骤 5

    在构建中配置签名

    在 Gradle、Capacitor CLI、fastlane 或 Capgo Cloud Build 中配置 keystore、别名和密码,然后构建已签名的 release AAB 或 APK。

  6. 步骤 6

    将已签名的 App 上传至 Google Play

    在 Play Console 中上传已签名的 Android App Bundle。使用 Play App Signing 时,此 keystore 会成为您的上传密钥,Google 则管理最终的应用签名密钥。

使用输出结果

使用生成的 keystore 签名 Android App

将别名和密码替换为您在上方输入的值。由于 keystore 是 PKCS#12 格式,密钥密码与 keystore 密码相同。

Gradle 签名配置

适用于 Capacitor、Ionic、React Native、Flutter 及原生项目。请将密码保存在 gradle.properties 或环境变量中。

android/app/build.gradle
// android/app/build.gradle
android {
    signingConfigs {
        release {
            storeFile file(RELEASE_STORE_FILE)
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_STORE_PASSWORD
            storeType "pkcs12"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

# ~/.gradle/gradle.properties (keep out of Git)
RELEASE_STORE_FILE=/path/to/release.p12
RELEASE_STORE_PASSWORD=your-password
RELEASE_KEY_ALIAS=release

Capacitor CLI

只需一条命令,即可为 Capacitor 应用构建已签名的 Android App Bundle。

Capacitor 签名构建
bunx cap build android \
  --keystorepath ./release.p12 \
  --keystorepass "your-password" \
  --keystorealias release \
  --keystorealiaspass "your-password" \
  --androidreleasetype AAB

Capgo 云端构建

只需保存一次 keystore,然后 使用 Capgo 在云端构建并签名 iOS 和 Android 应用.

Capgo CLI
bunx @capgo/cli@latest build credentials save \
  --platform android \
  --keystore ./release.p12 \
  --keystore-alias release \
  --keystore-key-password "your-password" \
  --keystore-store-password "your-password"

fastlane

从 CI secrets 向 Gradle action 注入签名属性。

Fastfile
gradle(
  task: "bundle",
  build_type: "Release",
  properties: {
    "android.injected.signing.store.file" => ENV["RELEASE_STORE_FILE"],
    "android.injected.signing.store.password" => ENV["RELEASE_STORE_PASSWORD"],
    "android.injected.signing.key.alias" => ENV["RELEASE_KEY_ALIAS"],
    "android.injected.signing.key.password" => ENV["RELEASE_STORE_PASSWORD"],
  }
)

在 CI 中验证、转换并存储

检查别名和指纹,为旧版工具转换为 JKS,或将文件编码后用作 CI secret。

keytool 与 base64
# Inspect the keystore, alias, and fingerprints
keytool -list -v -keystore release.p12 -storetype PKCS12

# Convert to JKS if an older tool requires it
keytool -importkeystore \
  -srckeystore release.p12 -srcstoretype PKCS12 \
  -destkeystore release.jks -deststoretype JKS

# Base64-encode the keystore for a CI secret
base64 -i release.p12 | tr -d '\n' > release.p12.base64

故障排除

常见的 Android keystore 错误及修复方法

Keystore 被篡改,或密码错误
Store 密码错误。请重新从密码管理器中复制,并检查 CI secret 中是否有末尾空格。
在 keystore 中未找到别名为 'release' 的密钥
别名不匹配。在 keystore 上运行 keytool -list 查看确切别名(区分大小写)。
最终块未正确填充
Key 密码错误。对于 PKCS#12 keystore,key 密码必须与 store 密码相同。
Keystore 格式无效
旧版 Java 8 工具链将 PKCS#12 文件误读为 JKS。请在 Gradle 中设置 storeType "pkcs12",或使用 keytool -importkeystore 将文件转换为 JKS。
您的 Android App Bundle 使用了错误的密钥签名
Google Play 要求使用原始上传密钥。请使用该密钥签名,或在 Play Console 中使用新 keystore 的 PEM 证书申请重置上传密钥。
Google Sign-In 或 Firebase Auth 仅在 release build 中失败
请将 release 的 SHA-1 和 SHA-256 指纹添加到 Firebase,并添加 Play Console 中的 Play App Signing 密钥指纹。

常见问题

Android keystore 生成器常见问题

关于 keystore 格式、密码、有效期、Google Play 上传密钥,以及密钥丢失后如何处理的解答。

什么是 Android keystore?

Android keystore 是一个受密码保护的文件,用于存储签名 APK 或 Android App Bundle 所需的私钥和证书。Android 和 Google Play 通过该签名验证每次更新是否来自同一开发者,因此后续的所有版本都必须使用相同的密钥进行签名。

如何在不使用 Android Studio 的情况下在线生成 Android keystore?

在上方表单中填写您的姓名、电子邮件、国家/地区 code、密钥别名 (key alias)、有效期和密码,然后点击 Generate keystore。您将获得一个开箱即用的 .p12 keystore、一份 PEM 格式的证书副本,以及 SHA-1 和 SHA-256 指纹。无需安装 Android Studio、JDK 或 keytool。

这个 Android keystore 生成器会生成什么格式的文件?

它会生成一个包含单个 RSA 2048 位签名密钥和 SHA-256 签名证书的 PKCS#12 (.p12) keystore,并提供 PEM 格式的证书导出。自 Java 9 起,PKCS#12 已成为默认 keystore 类型,Gradle、apksigner、jarsigner 和 Google Play 均支持该格式。如果旧版工具需要 JKS 文件,请使用 keytool -importkeystore 进行转换。

在线生成 keystore 安全吗?我的密钥会被存储吗?

Keystore 是通过 HTTPS 在无状态的 Capgo 端点上按需生成的,并直接返回到您的浏览器。响应通过 Cache-Control: no-store 发送,私钥、密码和文件绝不会写入数据库,也不会在响应后保留。如果您的安全策略要求密钥不得离开本地机器,请使用本页提供的等效 keytool 命令。

我可以使用这个 keystore 进行 Google Play 发布吗?

可以。您可以将其用作已加入 Play App Signing 的新应用的上传密钥 (upload key),或者用作直接分发 APK 的应用签名密钥 (app signing key)。Google Play 要求证书有效期至少持续到 2033 年 10 月 22 日,默认的 25 年有效期完全符合要求。

存储密码 (store password) 和密钥密码 (key password) 应该设置成不同的吗?

PKCS#12 格式的 keystore 容器和密钥使用同一个密码。在 Gradle、Capacitor CLI、fastlane 或 Capgo Cloud Build 中,请为 store password 和 key password 输入相同的值。

我该选择多长的有效期?

保持默认的 25 年即可。Google 建议至少使用 25 年,且 Google Play 会拒绝上传由 2033 年 10 月 22 日之前过期的证书签名的应用。之后你无法延长现有密钥的有效期。

如果我丢失了 keystore 或密码会怎样?

如果你的应用使用了 Play App Signing,你可以通过在此处生成新的 keystore 并上传其 PEM 证书,在 Play Console 中请求 Google 重置 upload key。如果没有使用 Play App Signing,丢失密钥意味着你无法为同一个应用列表发布更新,因此请务必将文件、alias 和密码备份在 secret manager 中。

我需要用这个工具生成 debug keystore 吗?

通常不需要。Android SDK 会自动在 ~/.android/debug.keystore 创建一个密码为 android、alias 为 androiddebugkey 的 debug keystore。请使用此生成器来创建在应用发布过程中必须保持稳定的 release 和 upload keys。

在哪里可以找到 SHA-1 和 SHA-256 指纹?

生成后会直接在结果面板中显示。请将它们注册到 Firebase、Google Sign-In、Google Maps 或 Android App Links (assetlinks.json) 中。注意,一旦 Play App Signing 对你的应用进行了重新签名,Google 服务还需要从 Play Console 获取 app signing key 的指纹。

它支持 Capacitor、Ionic、React Native 和 Flutter 应用吗?

支持。Keystore 与框架无关。任何使用 Gradle 的 Android build 都可以用它签名,包括 Capacitor、Ionic、React Native、Flutter 以及原生 Kotlin 或 Java 项目。

Capgo Native Build

使用 Capgo 在云端构建并签名 iOS 和 Android App

上传用此工具生成的 keystore,从 CI 触发 release build,并将签名的 Android App Bundle 发布到 Google Play,无需维护自己的构建集群。

探索 Native Build