APK 签名方案 V1 到 V4 的区别
本篇讲四代 APK 签名方案各自需要什么系统版本、勾错会发生什么,以及按设备情况怎么勾选。相关文档:手机上给APK签名的工具怎么用.md · 密钥库丢失的后果与预防.md
一、为什么签名方案有好几代
每一代新方案都是为了堵上一代的漏洞,但新方案只有更新的系统才认得:多勾一种方案,包就更安全、也能在新系统上通过校验,同时老设备可能就不认这个包了。所以「选方案」本质上是在包要装到什么设备上之间做取舍。
二、四代方案对照
| 方案 | 系统从哪代起认 | 带来的变化 | 需要关心什么 |
|---|---|---|---|
| V1 | 全部安卓版本 | 最老的 JAR 签名,只校验包内文件 | 单独用它的新包会被新系统拒绝 |
| V2 | Android 7.0 | 对整个安装包整体校验,更严也更快 | 常规首选,新系统硬要求 |
| V3 | Android 9 | 在 V2 基础上支持签名密钥轮替 | 普通自用碰不到 |
| V4 | Android 11 | 辅助增量安装的配套签名 | 有对应分发场景才需要 |
三、按设备情况选组合
| 情况 | 推荐勾选 | 理由 |
|---|---|---|
| 只装自己的新手机(Android 7 及以上) | V2(V1 可不勾) | 新系统硬要求 V2 及以上 |
| 还要照顾 Android 7 以下的老设备 | V1 + V2 | 老系统只认 V1,新系统要 V2 |
| 重签一个要发出去、设备情况不明的包 | V1 + V2 | 覆盖面最稳 |
两条平台硬规则,勾选前记一下:
- Android 11 起,目标版本较新的应用必须带 V2 及以上签名,只签 V1 的包直接拒装;
- Android 7.0 以下不认 V2,只签 V2 的包在老设备上装不上。
四、勾错会发生什么
| 勾法 | 后果 |
|---|---|
| 只勾 V1 | 签名步骤正常,Android 11 及以上的设备安装时报签名问题 |
| 只勾 V2 | Android 7.0 以下的设备装不上 |
| 勾了 V3 但没有轮替密钥 | 不影响安装,只是多写了用不上的签名块 |
表现对上了就按对应方向重签一次。手机上重签的操作流程,以及把四代方案做成勾选框的图形工具(如 Apksigner,6.10.0 版起加入 V3 / V4 开关),展开在 手机上给APK签名的工具怎么用.md。
五、换了签名密钥会怎样
同一应用的新旧包签名不一致时,设备会当作两个不同的应用处理:覆盖安装被拒,只能卸载重装。V3 支持的「密钥轮替」就是为换密钥准备的进阶用法,需要保留完整的密钥谱系——普通自用用不上;密钥本身怎么保管、丢了怎么办,见 密钥库丢失的后果与预防.md。