密钥库是什么:理解 APK 签名的身份证与私章
一个够用的比喻
把 APK 签名体系想成一套"身份证 + 私章":
- 密钥库(keystore):你放证件的保险柜,一个受密码保护的文件,里面可以存多对密钥。常见的扩展名是 .jks 或 .keystore。
- 密钥别名(alias):保险柜里的每一张证件,各有一个名字。签名时要指明用哪一把。
- 签名证书:每把密钥对应的"公章刻纹"。APK 签好后,包里就盖上了这个章——安卓系统靠它辨认"这个包是谁出的"。
系统怎么用它
安卓对签名有两类固定动作,这也是 apk-signer 存在的理由:
- 安装时校验:包必须带有效签名才能安装——没有签名的包会被系统直接拒绝,典型报错见INSTALL_PARSE_FAILED_NO_CERTIFICATES 排查。
- 升级时比对:覆盖安装或升级时,新旧包的签名必须一致;不一致就报冲突,见INSTALL_FAILED_UPDATE_INCOMPATIBLE 排查。
这对使用者意味着什么
两个直接推论,决定了后面所有章节的操作逻辑:
- 密钥库是资产,不是工具:你用某把密钥签出的应用,只有继续用同一把密钥才能升级覆盖。密钥丢了,已发布的应用就没法在自己手里更新——备份纪律见密钥库丢了会怎样。
- 同一个包可以换签名重签:这会得到一个"新身份"的包,装之前必须卸掉旧包——这条路径见换签名覆盖安装的正确姿势。
apk-signer 在其中的位置
它把"打开保险柜、取出私章、给包盖章"整套动作搬到了手机上:秘钥库标签页管理 keystore 文件,签名标签页选密钥签包。导入与导出的具体操作分别在导入已有密钥库与导出密钥库与 PEPK。