签名方案组合策略:v1+v2 为什么是稳妥默认
一张组合决策表
签名时到底勾哪几项,取决于这个包要去哪些设备。按包的最低兼容版本对号入座:
| 你的包要装的设备 | 建议组合 | 理由 |
|---|---|---|
| 不确定 / 三方分发 | v1 + v2 | 老设备靠 v1 进门,新设备靠 v2 强校验 |
| 只装 Android 7.0 以上 | v2(可加 v1 保险) | 新系统主路径是 v2 |
| 走密钥轮替的开发者 | v2 + v3 | v3 承接密钥换代,见v3 说明 |
| Android 11 流式安装 | v2/v3 + v4 | v4 依附于流式安装环境 |
v1+v2 为什么是万能底座
两者的校验对象互补:v1 管到"包内每个文件",v2 管到"整个文件字节"。带双签名的包,老系统读 v1 顺利进门,新系统优先走 v2 拿到更强的保护——同一份包,两头都不吃亏。这也是第三方整理教程里最常被推荐给普通用户的组合:它把"这包会传到什么设备"这个未知数直接消掉了。
有代价吗
有,但可接受:双签名让包体略微增大(多一段签名数据),安装校验时间差在手机上感知不到。对手机端手动签包的场景,这点开销换覆盖面,值。
什么时候该收紧
如果包的用途明确、设备明确,按表收窄反而更好:目标全是新设备时丢掉 v1,等于顺带关掉了老攻击面,理由见v1 方案的固有弱点。
签完记得验一遍
组合勾完、签完输出后,用应用内的验证能力确认签名如预期生效——验证 APK 文件就是干这个的。