【问题标题】:Cannot update debug APK on device无法更新设备上的调试 APK
【发布时间】:2020-03-31 08:53:42
【问题描述】:

尝试在我的设备上安装调试类型的 .apk 文件时遇到问题。我有一个已经安装了versionCode=n 的应用程序。当我尝试使用versionCode=n+1 安装相同的应用程序时,我收到错误消息。

这是我调用命令adb install xxx.apk后的消息

安装 xxx.apk 失败:失败 [INSTALL_FAILED_UPDATE_INCOMPATIBLE:包 xxx 签名不 匹配之前安装的版本;无视!]

我所有的 .apk 文件都使用 Android 调试密钥库进行了签名。通过命令jarsigner -verify -verbose -certs xxx.apk 确认,给我下一条消息:

  • 由“C=US, O=Android, CN=Android Debug”签名 摘要算法:SHA-256 签名算法:SHA256withRSA,2048位密钥

jar 已验证。

这些 .apk 文件是通过仅调用 assembleDebug 命令的 TeamCity CI 构建的。

这很奇怪,因为我可以轻松地更新 CI 构建的发布 APK 文件。仅在调试版本的情况下才会出现此问题。

您对此有任何想法吗? 提前致谢

【问题讨论】:

  • 您是否总是在同一台计算机上使用相同的调试密钥库?
  • 是的,我愿意。你的意思是不同计算机生成的单个项目的调试密钥库可以相互不同吗?
  • 是的,如果您希望它们创建相同的签名,您应该将调试密钥库复制到另一台计算机。或者只是删除应用程序,以便可以使用新签名重新安装它
  • @jeprubio 我确定我所有的密钥库文件都是在单台 PC 上生成的,但是我很感谢您的建议

标签: android installation apk keystore signature


【解决方案1】:

您的 android 应用程序的每个调试版本都将使用调试密钥库进行签名。

这是一个问题,因为在 travis-ci 或 docker 等持续集成环境中,每次创建环境时都会重新生成调试密钥库。

这意味着如果有人拥有您的应用程序的调试版本,他们将无法升级到更新的版本,因为密钥库会有所不同。

致谢:https://newfivefour.com/android-debug-build-constant-signed-keystore.html

还可以比较两个 apk 是否使用相同的密钥签名: 检查:How do I find out which keystore was used to sign an app?

【讨论】:

  • 谢谢。我将尝试创建一个从调试扩展的新构建类型,并使用自定义密钥库构建它。如果可行,我会将您的答案标记为正确的
猜你喜欢
  • 2018-07-04
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 2013-01-14
相关资源
最近更新 更多