287

我试图重新安装一个apk

$adb install -r new.apk

它显示了错误:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

一种解决方案是卸载并安装 new.apk,它工作正常。

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

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

4

16 回答 16

327

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

于 2010-07-06T11:36:31.360 回答
50

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

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

于 2011-03-16T15:14:46.497 回答
24

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

于 2012-09-10T21:32:28.527 回答
22

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

adb uninstall <package name>
于 2014-08-13T13:50:30.453 回答
9

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

于 2013-10-16T14:52:23.017 回答
6

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

于 2012-09-09T07:49:36.913 回答
3

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

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

之后我尝试重新安装apk,它起作用了。

于 2013-01-21T07:27:23.410 回答
3

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

谢谢

于 2014-10-20T13:53:23.283 回答
2

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

于 2016-05-06T17:33:11.493 回答
1

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

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

于 2015-07-15T18:03:25.050 回答
0

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

于 2014-06-27T15:23:01.050 回答
0

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

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

解决方案是:

  • 关闭虚拟机
  • vdfuse使用(读/写)装载 VDI 映像
  • 修复Partition1图像文件e2fsck
  • 卸载并重新启动 VM
于 2014-10-08T17:39:15.267 回答
0

我遇到了同样的问题,直到我意识到我已经运行了模拟器并且 adb 试图在上面安装

于 2015-04-20T14:22:00.810 回答
0

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

发布您的应用程序时不要忘记改回名称!

于 2015-12-04T00:22:34.780 回答
0

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

于 2016-02-04T09:56:57.177 回答
0

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

于 2019-01-17T03:37:36.990 回答