从不同的密钥库更新APK

6

阅读apk必须使用与之前版本相同的证书签名

我发现问题描述如下:

上传失败

您上传了一个使用不同证书签名的APK文件。您必须使用相同的证书。

采纳的答案(来自安卓官网)如下:

APK 文件必须使用相同的私钥签名。如果包名称和签名证书与现有版本不匹配,则 Market 将其视为新应用程序,并不会将其作为更新提供给用户。

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

这是三种不同的说法。那么究竟是哪一种呢?

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

2
“只要包含相同的证书,我可以使用不同的密钥库吗?” - 尽管我尚未尝试通过 keytool 导出证书并将其导入到单独的密钥库中。 “只要派生自相同的密钥对,我可以使用不同的证书吗?” - 我认为不行。我认为Android正在比较证书本身。至少,我们可以通过 PackageManager 访问的应用程序中嵌入的是 X509Certificate - CommonsWare
3个回答

0

实际上,您需要更新以下强制项:

  • Apk 版本
  • 版本代码

必须相同的内容:

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

0

请阅读文档:Android市场上的发布检查清单和更新

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


https://developer.android.com/studio/publish/app-signing.html#considerations 上说:“在您的应用程序预期寿命期间,您应该使用相同的证书对所有APK进行签名。” 稍后它说:“签署您应用程序的所有未来版本都需要使用您的私钥。” 因此,这引起了困惑。 - Martijn

0

从 Android 支持 参考链接,以下是总结情况的要点。如果您能使您的试用通过这三个要点,就不应该有任何麻烦。

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

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

$ jarsigner -verify -verbose -certs my_application.apk

如果结果相同,则表示您正在使用相同的密钥并且可以继续。如果结果不同,则需要使用正确的密钥重新签名APK。
要了解更多详细信息,请查看链接提到的应用程序签名过程

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接