【问题标题】:APK Update from different keystore来自不同密钥库的 APK 更新
【发布时间】:2016-09-16 12:19:56
【问题描述】:

阅读The apk must be signed with the same certificates as the previous version

我看到问题描述为

上传失败

您上传的 APK 使用与之前的 APK 不同的证书进行签名。您必须使用相同的证书。

接受的答案状态(来自 android 网站)

.apk 必须使用相同的私钥签名。如果软件包名称和签名证书与现有版本不匹配,Market 将认为它是一个新应用程序,不会将其作为更新提供给用户。

其他答案还声称您必须拥有原始密钥库。

这是 3 种不同的说法。是哪一个?

  • 密钥库是否必须相同(以及如何检查)?
  • 我可以使用不同的密钥库,只要它们包含相同的证书吗?
  • 我可以使用不同的证书,只要它是从同一个密钥对派生的吗?

【问题讨论】:

  • "我可以使用不同的密钥库,只要它们包含相同的证书吗?" - 大概,虽然我没有尝试通过keytool 导出证书并将其导入单独的密钥库。 “我可以使用不同的证书,只要它来自同一个密钥对吗?” ——我不这么认为。我认为Android正在比较证书本身。最少,我们可以通过PackageManager 访问应用程序的内容是X509Certificate

标签: android signing


【解决方案1】:

阅读文档:Launch Checklist & Publishing Updates on Android Market

在上传更新的应用程序之前,请确保您已 增加了 android:versionCode 和 android:versionName 属性 在清单文件的元素中。另外,包名必须是 相同,并且 .apk 必须使用相同的私钥签名如果 包名和签名证书不匹配 现有版本,Market 将其视为新应用程序,并将 不会将其作为更新提供给用户。

【讨论】:

  • developer.android.com/studio/publish/… 表示“在应用的预期生命周期内,您应该使用相同的证书为所有 APK 签名。”。后来它说“您的 私钥 是签署您的应用程序的所有未来版本所必需的。”,因此造成混乱
【解决方案2】:

来自android 支持reference link's,以下是结束该场景的要点。如果你能通过这三项,应该没有任何麻烦

  • 更新后的 APK 包名需与当前版本一致。
  • 版本代码需要高于当前版本。
  • 更新后的 APK 需要使用与当前版本相同的签名进行签名。

要验证您的 APK 是否使用与之前版本相同的认证,您可以在两个 APK 上运行以下命令并比较结果

$ jarsigner -verify -verbose -certs my_application.apk

如果结果相同,则说明您使用的是相同的密钥并准备好继续。如果结果不同,则需要使用正确的密钥对 APK 重新签名。

更多详情请通过link mentioning Sign Your App Procedures

【讨论】:

    【解决方案3】:

    其实你需要强制更新

    • Apk 版本
    • 版本代码

    必须相同:

    • 密钥库和密码
    • Pckd 名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2022-01-22
      相关资源
      最近更新 更多