跳过主要内容

安卓签名

安卓 Keystore 生成器

在线生成安卓 Keystore,仅需几秒,不需要安卓 Studio 或 keytool。获取 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. 选择将与此应用程序一起使用的别名和密码。
  2. 2. 下载密钥库并将元数据保存在您的秘密管理器中。
  3. 3. 在 Gradle 或您的 CI 环境中配置相同的别名和密码。
  4. 4. 保持上传密钥稳定,以便未来的 Play 发布不会中断。

输入

密钥库详细信息

填写应嵌入在签名证书中的主题信息,并选择一个稳定的别名。

输出

生成的 Android 签名包

生成后您将获得可下载的keystore、证书导出和指纹,用于商店设置或OAuth集成。

生成签名包以在此处显示别名、指纹和文件下载。

基础

什么是Android keystore?

Android keystore是一种密码保护的文件,包含私钥和证书,用于签名您的应用。每个APK和Android App Bundle都必须在安装或发布之前签名,Android只接受使用相同密钥签名的更新。

因此,keystore是您的项目中最重要的文件之一。使用Play App Signing,它作为您的 上传密钥,Google在重新签名您的应用之前会检查。没有Play App Signing,它就是 应用签名密钥 ,而丢失它意味着您无法再更新应用。

该生成器创建了一个PKCS#12 (.p12) keystore,具有RSA 2048-bit密钥和SHA-256证书,输出与 keytool 和 Android Studio 签名向导,具有满足 Google Play 要求的 25 年默认有效期。

安全性和隐私

如何生成您的密钥库

  • 密钥库在 HTTPS 上通过无状态的 Capgo 端点创建,直接以下载形式返回到您的浏览器。
  • 响应以 Cache-Control: no-store私钥、密码和文件不会保存到数据库中,也不会保留在响应之后。
  • 使用 AES-256 加密保护密钥库,使用 PKCS#12 容器。
  • 无需帐户或注册即可使用,请求会被限制以防止滥用。

需要一个永远不会离开您的机器的密钥? 运行本地等效的 keytool 命令。它会产生相同类型的密钥库。

等效的 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

    输入证书详细信息

    Add your full name, email, and two-letter country code. Organization, unit, city, and state are optional and only appear in the certificate subject.

  2. 选择别名、有效期和密码

    步骤 3

    生成和下载密钥库

  3. 步骤 4

    Enter the certificate details

    Add your full name, email, and two-letter country __CAPGO_KEEP_0__. Organization, unit, city, and state are optional and only appear in the certificate subject.

  4. 第四步

    备份密钥库和凭据

    将密钥库文件、别名和密码一起存储在密码管理器或秘密管理器中。永远不要将密钥库提交到 Git。

  5. 第 5 步

    配置签名

    在 Gradle、Capacitor、CLI、fastlane 或 Capgo Cloud Build 中指向密钥库,使用别名和密码,然后构建一个签名的发布 AAB 或 APK。

  6. 第 6 步

    上传签名的应用到 Google Play

    在 Play Console 中上传签名的 Android App Bundle。使用 Play App Signing,这个密钥库将成为上传密钥,Google 将管理最终的应用签名密钥。

使用输出

使用生成的密钥库签名 Android 应用

将别名和密码替换为您上面输入的值。因为密钥库是 PKCS#12,因此密钥密码与存储密码相同。

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 云构建 __CAPGO_KEEP_0__ __CAPGO_KEEP_1__

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

将签名属性注入 Gradle 动作,从 CI 秘密中获取。

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密钥

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 常见错误及解决方法

常见的Android keystore错误和修复
Keystore被篡改,或者密码不正确
存储密码错误。复制它从密码管理器中复制,检查CI密钥末尾的空格
没有找到名为'release'的密钥
别名不匹配。运行keytool -list在keystore中查看确切的别名,别名敏感
给定的最终块未正确填充
无效的密钥库格式
Java 8 的旧工具链正在读取 PKCS#12 文件作为 JKS。请在 Gradle 中设置 storeType "pkcs12" 或使用 keytool -importkeystore 将文件转换为 JKS。
您的 Android App Bundle 使用错误的密钥签名
Google Play 期望原始上传密钥。使用该密钥签名,或者在 Play Console 中使用 PEM 证书从新密钥库请求上传密钥重置。
Google Sign-In 或 Firebase Auth 只在发布构建中失败
请将发布 SHA-1 和 SHA-256 指纹添加到 Firebase 中,另外也将 Play App Signing 密钥指纹从 Play Console 中添加。

常见问题

关于密钥库格式、密码、有效性、Google Play 上传密钥以及如果密钥丢失该如何做的答案。

Android 密钥库生成器常见问题

关于密钥库格式、密码、有效性、Google Play 上传密钥以及如果密钥丢失该如何做的答案。

什么是 Android 密钥库?

如何在线生成 Android.keystore 文件而不使用 Android Studio?

请在上面的表单中填写您的姓名、电子邮件、国家code、密钥别名、有效期和密码,然后选择生成密钥库。您将获得一个可直接使用的.p12密钥库、证书的PEM副本以及SHA-1和SHA-256指纹。无需安装Android Studio、JDK或keytool。

该 Android 密钥库生成器产生什么文件格式?

它生成一个PKCS#12(.p12)密钥库,包含一个2048位RSA签名密钥和一个SHA-256签名证书,另附PEM证书导出。PKCS#12是Java 9以后的默认密钥库类型,Gradle、apksigner、jarsigner和Google Play都支持。如果一个旧工具需要一个JKS文件,请使用keytool -importkeystore命令转换。

在线生成密钥库是否安全?我的密钥是否会被存储?

密钥库是通过无状态Capgo端点以HTTPS协议生成的,并直接返回给您的浏览器。响应以Cache-Control:no-store发送,私钥、密码和文件永远不会写入数据库或保留。如果您的安全策略要求密钥永远不离开您的机器,请使用本页面上的等效keytool命令。

可以用这个密钥库发布Google Play应用吗?

是的。您可以将其用作Play App Signing新应用的上传密钥,或者用作直接APK分发的应用签名密钥。Google Play要求证书在2033年10月22日之前有效,25年有效期的默认值覆盖了这个要求。

密钥库密码和密钥密码是否应该不同?

PKCS#12密钥库使用一个密码来保护容器和密钥。在Gradle中,Capacitor CLI,fastlane,或者Capgo Cloud Build中,输入相同的值作为存储密码和密钥密码。

我应该选择什么有效期?

保持25年默认值。Google建议至少25年,并且Google Play会拒绝使用过期证书(截止2023年10月22日)签名的上传。您无法延长现有密钥的有效期。

如果我丢失密钥或密码会发生什么?

如果您的应用使用Play App Signing,您可以在Play Console中通过生成新的密钥库并上传其PEM证书来要求Google重置上传密钥。没有Play App Signing,丢失密钥意味着您无法发布相同应用清单的更新,因此请在秘密管理器中备份文件、别名和密码。

我需要这个工具来生成调试密钥库吗?

Usually not. The Android SDK creates a debug keystore automatically at ~/.android/debug.keystore with the password android and the alias androiddebugkey. Use this generator for release and upload keys that must stay stable across store releases.

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

它们将在生成结果面板中显示。请将它们注册到Firebase、Google Sign-In、Google Maps或Android App Links(assetlinks.json)中。请注意,一旦Play App Signing重新签名您的应用,Google服务也需要从Play Console获取应用签名密钥指纹。

它是否适用于 Capacitor、Ionic、React Native 和 Flutter 应用程序?

是的。Keystore 是框架无关的。任何使用 Gradle 的 Android 构建都可以使用它签名,包括 Capacitor、Ionic、React Native、Flutter 和本机 Kotlin 或 Java 项目。