本文最后更新于: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
| keytool -list -v \ -keystore ~/.android/debug.keystore \ -alias androiddebugkey \ -storepass android \ -keypass android
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
keytool -list -v -keystore app.jks
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
keytool -storepasswd -keystore app.jks
keytool -importkeystore -srckeystore app.jks -destkeystore app.p12 -srcstoretype JKS -deststoretype PKCS12
|
注意事项
- 备份!备份!备份! Keystore 丢了应用就废了
- 密码不要上传到 Git,用环境变量或
local.properties
- 有效期设长一点,10000 天起步,过期后用户无法升级
- Google Play 签名:使用 Play App Signing 时,你上传的证书和最终分发的证书指纹不同,配置第三方服务时注意区分
Keystore 管理就是这几个命令,用熟了很简单。最重要的是保管好文件和密码。