【问题标题】:How to deal with INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES without uninstall?如何在不卸载的情况下处理 INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES?
【发布时间】:2010-07-06 10:34:18
【问题描述】:

我尝试重新安装一个apk

$adb install -r new.apk

它显示错误:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

一种解决方案是卸载并安装 new.apk,效果很好。

但我想知道是否可以在不卸载的情况下重新构建 apk 并重新安装。例如。更改 AndroidManifest.xml 中的一些配置,或不签署 APK 等。

如果您能告诉我“INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES”的全部含义,我们将不胜感激。

【问题讨论】:

  • 尝试通过在实际设备上运行您的 apk 来解决问题,它总是对我有用
  • 它对我不起作用。 ^ @Mr.Derpinthoughton
  • 当应用程序被签名两次并且升级以相反的顺序签名时,也会发生这种情况。有关这方面的更多信息,请参阅stackoverflow.com/a/13618894/5276890

标签: android apk


【解决方案1】:

这意味着您的应用程序的新副本(在您的开发机器上)使用的签名密钥与您的应用程序的旧副本(安装在设备/模拟器上)不同。例如,如果这是一个设备,您可能已经从不同的开发机器(例如,其他开发人员的机器)上放置了旧副本。或者,旧的使用您的生产密钥签名,新的使用您的调试密钥签名。

【讨论】:

  • @atourney:您必须将以前机器的密钥库(例如,debug.keystore)复制到新机器。
  • 请注意,debug.keystore 不在您的项目目录中。它通常在您的~/.android/ 目录中。 (见developer.android.com/guide/publishing/…
  • 如何给调试包起一个不同的名字? (例如 {PRODUCT_NAME} 开发者)
  • @ChristianBongiorno:同步您的签名密钥库(例如,debug.keystore)。选择一个作为您的主密钥库,将其复制到所有其他开发人员机器,替换他们现有的密钥库。
  • 不要忘记在复制文件后重建您的项目。我移动了文件并将应用程序重新发送到设备(但它仍在使用旧的debug.keystore)。一旦我重建了项目(在 Android Studio 中使用 Build->Rebuild),密钥就会同步。
【解决方案2】:

我在测试新的 Xoom 时遇到了这个问题。我之前从 Marketplace 安装了我的应用程序。后来在尝试测试新版本的应用程序时,我遇到了这个错误。

我通过删除通过 Marketplace 安装的应用程序来修复它(只需按住并拖动到垃圾箱)。此后,我能够毫无问题地部署我的开发版本。

【讨论】:

  • 是的,卸载将解决此权限问题。我想知道我是否可以在不卸载的情况下解决这个问题
  • 换了一部新手机,忘记了这件事。我如何标记两次:)
【解决方案3】:

当团队中的另一位开发人员在我尝试部署到的硬件设备上构建我们的应用程序时,我发生了这种情况。从硬件卸载应用程序解决了我的问题。

【讨论】:

  • 太棒了!在命令adb uninstall <package name> 之后工作。谢谢。
  • 我有一个更独特的案例,但这个答案导致了解决方案。我在本地通过科尔多瓦 CLI 安装了一个应用程序,还从 PG 版本安装了一个应用程序。我必须卸载这两个应用程序才能让错误消失。
  • @Paul 阁下 - 保罗一世国王,虽然我不是最初的提问者,但您的命令对我有用(毫无疑问,其他人考虑到您的评论有多受欢迎)。我可以建议您将其发布为答案吗?
  • @barlop:我使用该命令发布了一个答案,只是为了让其他可能遇到此问题的人更容易看到。谢谢。
  • 我不明白为什么这个答案有赞成票。他清楚地说“无需卸载”! ——
【解决方案4】:

这是使用 adb 从设备上卸载应用程序的命令:

adb uninstall <package name>

【讨论】:

  • 问题是关于如何在不卸载的情况下解决问题。
  • 我不明白为什么这个答案有赞成票。他清楚地说“无需卸载”!
  • 没有用于替换证书不一致的包的 pm 标志,对吧?安全意图?
【解决方案5】:

即使在卸载原始 APK 后,我也收到此错误,这令人费解。最后我意识到我已经在我的 Nexus 7 上设置了多个用户进行测试,并且该应用程序仍然为其他用户之一安装。一旦我为所有用户卸载它,错误就消失了。

【讨论】:

    【解决方案6】:

    我在编写更新代码时更改了包名称,以便我可以通过 Eclipse 在我的设备上对其进行调试,而无需删除已安装的旧版本。在尝试重新安装时不恢复我使用的包名称,我得到了同样的错误。使用相同的包名重新安装成功。

    【讨论】:

      【解决方案7】:

      只需从设备中删除旧版本并重新安装即可。因为 device.keystore 已经存在于设备中,所以只需卸载构建并重新安装 APK 就可以了..

      谢谢

      【讨论】:

      • 是的,CommonsWare 的答案更好更清晰。谢谢
      【解决方案8】:

      我遇到了另一个用例,我遇到了类似的错误。 起初我得到错误时,我惊慌失措,并删除了/data/data/{package.name} 之后我尝试了,我的问题仍然存在。 然后我尝试卸载,失败了。

      然后我删除了/system/app 中存在的apk 文件(需要root 访问权限),并尝试卸载并成功。

      之后我尝试重新安装apk,它成功了。

      【讨论】:

        【解决方案9】:

        如果您在输出窗口中遇到错误“失败 [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]”的 Andorid 设备或模拟器部署失败,只需删除设备或模拟器上的现有应用并重新部署即可。调试版本将使用调试证书,而发布版本将使用您配置的证书。此错误只是让您知道设备上安装的应用程序的证书与您尝试安装的证书不同。在非开发(应用商店)场景中,这可能表明应用已损坏或以其他方式修改,无法安全地安装在设备上。

        【讨论】:

          【解决方案10】:

          不管怎样,我在我的 Cordova 项目中添加了一个新插件后遇到了这个问题。我一直在通过 USB 直接在设备上构建和安装 cordova。

          我通过从设备上卸载应用程序来修复它,并且在下一次部署时没有问题。

          【讨论】:

            【解决方案11】:

            上面没有任何东西对我有用。对我来说,问题是我在 android-support-v7-appcompat 的 Java 构建路径中有错误的源代码。当您转到项目>构建路径>配置构建路径>时。在 Source 选项卡下,确保您有 android-support-v7-appcompat/gen 、 android-support-v7-appcompat/libs 和 android-support-v7-appcompat/src 等等。单击确定,它应该可以工作。

            【讨论】:

              【解决方案12】:

              我今天遇到了同样的错误,但问题并不完全相同。我在 VirtualBox 中使用安装了 Android 的 ADB。我尝试安装我的应用程序的不同版本(签名/未签名,调试/发布模式)并交替出现两个错误:INSTALL_FAILED_UID_CHANGEDINSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

              现在,在查看/data/data/{package.name} 时,我发现卸载应用程序后仍有一堆文件。我尝试 rm -rf 他们但没有成功:我遇到了 I/O 错误。

              解决方案是:

              • 关闭虚拟机
              • 使用vdfuse 装载VDI 映像(读/写)
              • e2fsck修复Partition1图像文件
              • 卸载并重新启动 VM

              【讨论】:

                【解决方案13】:

                我遇到了同样的问题,直到我意识到我正在运行模拟器并且 adb 正在尝试安装它

                【讨论】:

                  【解决方案14】:

                  由于验证基于包的名称,您可以在 config.xml 或清单文件中将包名称更改为您想要的其他名称。

                  发布您的应用时别忘了改回名称!

                  【讨论】:

                    【解决方案15】:

                    我在 Genymotion 上尝试执行 gradle 任务 connectedDebugAndoidTest(或 connectedAndroidTest)时遇到了这个问题。在普通模拟器上运行它解决了这个问题。

                    【讨论】:

                    • 我也在同样的情况下得到了这个(用 Genymotion 测试)。原来这是与测试包的签名冲突。删除测试包解决了这个问题。
                    【解决方案16】:

                    我认为,您的应用程序是由其他帐户安装的。(多帐户模式功能)您可以在设置>应用程序>“应用程序名称”>卸载中卸载应用程序

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2018-08-24
                      • 1970-01-01
                      • 1970-01-01
                      • 2022-06-15
                      • 1970-01-01
                      • 2011-10-22
                      • 2012-09-26
                      • 2010-09-24
                      相关资源
                      最近更新 更多