Android Keystore 命令速查

本文最后更新于:2025年2月8日 凌晨

Android 应用发布前需要签名,签名需要 Keystore 文件。这篇文章汇总了常用的 Keystore 操作命令,方便查阅。

Keystore 是什么

Keystore(密钥库)是一个安全存储加密密钥的文件(通常是 .jks.keystore 后缀)。它包含:

  • 私钥(用于签名应用)
  • 证书(包含公钥和身份信息)

重要提示:Keystore 文件一旦丢失,你的应用就无法更新。务必做好备份。

两种密码

Keystore 涉及两个密码,容易搞混:

密码类型 作用 示例值
Store Password 保护整个 Keystore 文件 通常比较复杂的密码
Key Password 保护里面的某个密钥 可以和 Store Password 一样

创建 Keystore

创建新的签名证书

1
2
3
4
5
6
7
keytool -genkeypair \
-v \
-keystore my-key.jks \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-alias my-alias

参数说明:

  • -genkeypair:生成密钥对
  • -keystore:输出文件名
  • -keyalg RSA:使用 RSA 算法
  • -keysize 2048:密钥长度 2048 位
  • -validity 10000:有效期 10000 天(约 27 年)
  • -alias:密钥别名

执行后按提示输入密码和个人信息即可。

创建调试证书

1
2
3
4
5
6
7
8
keytool -genkeypair \
-v \
-keystore debug.keystore \
-storepass android \
-alias androiddebugkey \
-keypass android \
-keyalg RSA \
-validity 10000

查看 Keystore 信息

查看基本信息

1
keytool -list -keystore my-key.jks

查看详细信息(含 SHA1/SHA256)

1
keytool -list -v -keystore my-key.jks

查看 Android Studio 默认调试证书

1
2
3
4
5
6
7
8
9
10
11
12
13
# macOS / Linux
keytool -list -v \
-keystore ~/.android/debug.keystore \
-alias androiddebugkey \
-storepass android \
-keypass android

# Windows
keytool -list -v \
-keystore %USERPROFILE%\.android\debug.keystore \
-alias androiddebugkey \
-storepass android \
-keypass android

SHA1 和 SHA256 是配置 Firebase、Google Play、第三方 SDK 时常用的指纹信息。

修改 Keystore

修改密钥库密码

1
keytool -storepasswd -keystore my-key.jks

修改别名

1
2
3
4
keytool -changealias \
-keystore my-key.jks \
-alias old-name \
-destalias new-name

修改密钥密码

1
2
3
keytool -keypasswd \
-keystore my-key.jks \
-alias my-alias

导出证书

导出公钥证书给别人(比如配置推送服务时需要):

1
2
3
4
keytool -exportcert \
-alias my-alias \
-file my-cert.cer \
-keystore my-key.jks

格式转换

JKS 转 PKCS12(推荐)

PKCS12 是更通用的格式:

1
2
3
4
5
6
7
keytool -importkeystore \
-srckeystore my-key.jks \
-destkeystore my-key.p12 \
-srcstoretype JKS \
-deststoretype PKCS12 \
-srcalias my-alias \
-destalias my-alias

PKCS12 转 JKS

1
2
3
4
5
keytool -importkeystore \
-srckeystore my-key.p12 \
-srcstoretype PKCS12 \
-destkeystore my-key.jks \
-deststoretype JKS

在 Gradle 中配置

基础配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
android {
signingConfigs {
release {
storeFile file("my-key.jks")
storePassword "your-password"
keyAlias "my-alias"
keyPassword "your-password"
}
}

buildTypes {
release {
signingConfig signingConfigs.release
}
}
}

从环境变量读取(更安全)

不要把密码写死在代码里:

1
2
3
4
5
6
7
8
signingConfigs {
release {
storeFile file(System.getenv("KEYSTORE_PATH"))
storePassword System.getenv("KEYSTORE_PASSWORD")
keyAlias System.getenv("KEY_ALIAS")
keyPassword System.getenv("KEY_PASSWORD")
}
}

打包时:

1
2
3
4
export KEYSTORE_PASSWORD=yourpassword
export KEY_ALIAS=my-alias
export KEY_PASSWORD=yourpassword
./gradlew assembleRelease

快速参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 创建
keytool -genkeypair -v -keystore app.jks -keyalg RSA -validity 10000 -alias key0

# 查看 SHA1
keytool -list -v -keystore app.jks

# 查看调试证书 SHA1
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android

# 修改密码
keytool -storepasswd -keystore app.jks

# 转 PKCS12
keytool -importkeystore -srckeystore app.jks -destkeystore app.p12 -srcstoretype JKS -deststoretype PKCS12

注意事项

  1. 备份!备份!备份! Keystore 丢了应用就废了
  2. 密码不要上传到 Git,用环境变量或 local.properties
  3. 有效期设长一点,10000 天起步,过期后用户无法升级
  4. Google Play 签名:使用 Play App Signing 时,你上传的证书和最终分发的证书指纹不同,配置第三方服务时注意区分

Keystore 管理就是这几个命令,用熟了很简单。最重要的是保管好文件和密码。


Android Keystore 命令速查
http://bestkele.com/2021/09/23/android/android-keystore/
作者
kele
发布于
2021年9月23日
许可协议