签名密钥库丢失的后果与预防
本篇讲 APK 签名用的密钥库为什么丢不起、丢了各自有什么后果,以及怎么备份才算真的稳妥。相关文档:手机上给APK签名的工具怎么用.md · APK签名方案V1到V4的区别.md
一、密钥库是什么,为什么重要
给 APK 签名要有一对钥匙:私钥负责签,证书跟着包走,这对钥匙通常存放在一个密钥库文件里(.jks / .keystore)。同一个应用要出更新,新旧包必须用同一把私钥签,系统才认作同一个人的升级。
一句话:APK 丢了可以随时重新拿,密钥库丢了就真没了。
二、丢了之后的后果
| 情况 | 后果 |
|---|---|
| 只是自己手机上装着用的包 | 卸载重装,用新密钥重签即可,没有实际损失 |
| 已经发出去给别人用的应用 | 换新密钥重签后包名不变,但签名不同,设备会拒绝覆盖安装;只能让大家卸载重装,或换一个包名重新发布 |
签名密钥没有任何「找回」机制,第二行的代价随用户量线性增长——所以预防永远比补救便宜。
三、备份怎么做才靠谱
密钥库文件、密码、别名,三样缺一不可,备份时一起安排:
- 导出密钥库文件(改文件名不影响使用,别改扩展名);
- 密码和别名单独记录,别和密钥库文件放在同一个文档里;
- 至少存两处:电脑一份、网盘或移动硬盘一份。
恢复时把文件传回手机,在工具里重新导入即可,不需要其他配置。手机上的导入导出操作(以 Apksigner 为例,免费版即可完成)见 手机上给APK签名的工具怎么用.md。
四、没有现成密钥库怎么办
不花钱的路子:在电脑上用 JDK 自带的 keytool 生成一份,再传回手机导入:
keytool -genkeypair -v -keystore my-release.jks -alias myalias -keyalg RSA -validity 10000
有效期直接给到 10000 天(约 27 年)。生成完马上做第三节的备份。两个容易踩的细节:
- 密钥库有 JKS 与 PKCS12 两种常见格式,哪个环节不认就用
keytool -importkeystore互转一次; - 库本身与库内别名可能各有一把密码,签名工具只问一次时通常问的是库密码,自己生成的建议两处设成同一个。
现在就把密钥库按第三节备份两处,几分钟的事,别等出事才动手。