Safe Haven 中文文档 下载 App

混合商店安装注意事项,三个来源签名不同会导致覆盖失败

混装最常见的坑

一个应用可能同时出现在 Google Play、F-Droid、IzzyOnDroid、Safe Haven 里,而且每个来源的 APK 签名都不一样。安卓只允许同签名覆盖安装,所以你从 A 商店装的应用,B 商店发了新版本,安卓会拒绝覆盖。

这不是 Safe Haven 的 bug,是安卓从 API 1 就有的安全机制——防止恶意应用冒充已安装的应用。

三个签名来源

在 Safe Haven 的目录里,一个应用可能有三个来源:

来源签名者标记
开发者自己提交开发者原生签名verified_source / 无 upstream 标记
IzzyOnDroid 同步开发者原生签名upstream: "izzyondroid"
F-Droid 同步F-Droid 重签名upstream: "fdroid"

所以:

安卓会报什么错

安卓拒绝覆盖安装时通常弹的提示类似:

"应用未安装。存在签名不同的具有相同包名的应用。"

不同安卓版本和 ROM 的提示文本略有差异,但核心意思都是:这个包名已经有应用了,签名不一样,不能覆盖。

处理方式

方案 1:固定一个渠道(推荐)

某个应用从哪个渠道首次安装,之后的所有更新也只能从这个渠道。不要在多个渠道之间来回跳。

这个方案最简单、最稳:

不要从 Google Play 装了一个应用,然后想用 Safe Haven 来更它——签名不同,装不上。

方案 2:卸载重装(唯一可行的换渠道方式)

真想换渠道:

  1. 备份应用数据(应用内设置 → 备份导出,或用 Helium / Swift Backup 等工具)
  2. 卸载旧版应用
  3. 从新渠道装新版
  4. 恢复数据

注意:卸载会清除所有应用数据,一定要先备份!

方案 3:装不同签名的不同版本(不推荐)

有些应用开发者会为每个商店提交不同签名的包。理论上你可以同时装 Google Play 版和 Safe Haven 版——但前提是包名必须不同(安卓按包名 + 签名判断应用唯一性,两个签名的 APK 包名相同 = 只能装一个)。如果开发者用了不同包名(比如 com.example.app.play vs com.example.app.fdroid),那可以共存。但这种开发者非常罕见。

混装场景

场景能覆盖吗处理
Safe Haven 开发者原生签名 → Izzy 同步包能(同一个签名)直接装
Safe Haven 开发者签名 → F-Droid 重签名不能卸载重装
F-Droid → Google Play不能卸载重装
Safe Haven → Google Play不能卸载重装
Safe Haven v1.0 → Safe Haven v1.1能(同签名)直接更新

怎么确认签名

在 Safe Haven 客户端里,每个应用详情页会展示签名哈希。你可以:

  1. 用第三方工具(比如 APK Signature Verifier、ApkInfo)查看本地已安装版本的签名哈希
  2. 和 Safe Haven 详情页上的签名哈希比对
  3. 一样 = 同签名,可以覆盖;不一样 = 不同签名,要卸载重装

或者用 Android SDK 的 apksigner verify --print-certs 命令比对。

开发者合法轮换签名密钥怎么办

极罕见的情况下,开发者可能因为密钥丢失、证书过期等原因合法轮换签名密钥。此时:

签名锁定在混装场景下的作用

Safe Haven 的签名锁定机制在混装场景下对你有用:

所以"固定一个渠道"依然是最稳的策略——这样你只需要关心一个签名基准。