安装提示签名不匹配:覆盖安装为什么必然失败
「安装失败,签名与已安装的应用不一致」——看到这句话,很多用户的第一反应是点几次重试。这一篇把这条提示讲透,顺便终结「有没有办法不卸载」的执念。
提示在说什么
安卓的包管理机制规定:同一包名的应用更新安装时,新包签名必须与已安装版本一致。FPA 打包后的应用用了新的签名(不改签名根本装不上去),所以只要原应用还在手机上,这次安装就必然被系统拒绝。它与下面这些因素全都无关:
- 与下载的包是否完整无关;
- 与存储空间无关;
- 与点安装的姿势、次数无关。
唯一的正解
卸载原应用 → 安装打包后的版本。操作序列的完整版在执行 Patch 到安装。
「有没有办法不卸载」
没有,也不该有。签名校验是安卓应用完整性的基础防线,寻找绕过它的办法属于对抗系统安全机制的范畴——而且技术上这条路在正常设备上就是堵死的。换一个角度想:FPA 的免 Root 路线之所以成立,正是因为它不碰系统层;系统层的校验规则对它同样生效。
卸载前必须做的两件事
- 备份数据:卸载清空应用本地数据,聊天记录、离线下载先在应用内备份;
- 确认装得回来:万一打包版有问题,原应用能从商店或安装包重装。
装上之后功能失灵?
签名变化还会带来一类「装得上但不好用」的问题——支付调起、第三方登录、分享等可能失效,这是重签名的正常代价而不是故障,详见支付登录分享失灵。装好后又打不开应用,是另一类问题:应用打包后闪退。