如何在不卸载的情况下处理INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES?


277

我试图重新安装apk

$adb install -r new.apk

它显示了错误:

Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]

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

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

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


尝试通过在实际设备上运行apk来解决问题,它始终对我
Kyle 2015年

它对我不起作用。^ @Derpinthoughton先生
Crime_Master_GoGo

当应用程序签名两次并且升级以相反的顺序签名时,也会发生这种情况。有关更多信息,请参见stackoverflow.com/a/13618894/5276890
罗伊·福克

Answers:


319

这意味着您的应用程序的新副本(在开发计算机上)是用与您的应用程序的旧副本(安装在设备/仿真器上)不同的签名密钥签名的。例如,如果这是设备,则可能是从其他开发机器(例如,其他开发者的机器)上放置了旧副本。或者,旧的用您的生产密钥签名,而新的用您的调试密钥签名。


6
@atourney:您必须将先前计算机的密钥库(例如,debug.keystore)复制到新计算机上。
CommonsWare 2010年

12
请注意,debug.keystore不在您的项目目录中。它通常在您的~/.android/目录中。(见developer.android.com/guide/publishing/...
ohhorob

3
怎样给调试包一个不同的名字?(例如{PRODUCT_NAME}开发人员)
sandstrom 2011年

6
@ChristianBongiorno:同步您的签名密钥库(例如debug.keystore)。选择一个作为您的主密钥库,将其复制到所有其他开发人员计算机,以替换其现有的密钥库。
CommonsWare

2
跨文件复制后,别忘了重建项目。我移动了文件,然后将应用程序重新发送到设备上(但仍使用旧的debug.keystore)。一旦我重建了项目(使用Android Studio中的Build-> Rebuild),密钥就同步了。
本杰明·凯泽

48

我在新的Xoom上进行测试时遇到了这个问题。我以前是从Marketplace安装我的应用程序的。稍后,当尝试测试该应用程序的新版本时,我遇到了此错误。

我通过删除通过Marketplace安装的应用程序来解决此问题(只需按住并拖动到回收站即可)。之后,我能够毫无问题地部署我的开发版本。


12
是的,卸载将解决此权限问题。我想知道是否可以在不卸载的情况下解决此问题
Johnny

有了新手机,却忘记了这一点。我该如何两次标记这个问题:)
安东尼·霍恩2015年

22

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


16
大!指挥后工作adb uninstall <package name>。谢谢。
保罗

我有一个更独特的案例,但是这个答案导致了解决方案。我在本地通过cordova CLI安装了一个应用程序,也从PG版本安装了一个应用程序。我必须卸载这两个应用程序才能使错误消失。
DemitryT

@Paul阁下-保罗一世国王,虽然我不是最初的提问者,但您的命令对我有用(毫无疑问,鉴于您的评论意见很高,其他人也是如此)。我可以建议您将其发布为答案吗?
barlop

1
@barlop:我发布了该命令的答案,以使其他人也可能遇到此问题,以使其更加可见。谢谢。
保罗

3
我不明白为什么这个答案有争议。他清楚地说:“完全没有安装”!–
基督教徒

20

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

adb uninstall <package name>

8
问题是有关如何在不卸载的情况下解决问题。
Janaka Bandara'3

2
我不明白为什么这个答案有争议。他清楚地说:“完全没有安装”!
基督教徒

没有pm标志可以用不一致的证书替换软件包,对吗?安全意图?
JohnyTex

9

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


5

我在编码更新时更改了程序包名称,以便可以通过Eclipse在设备上对其进行调试,而无需删除已安装的旧版本。如果不还原尝试重新安装时使用的软件包名称,则会出现相同的错误。使用相同的软件包名称,重新安装成功。


3

只需从设备中删除旧版本,然后重新安装即可。由于device.keystore已存在于设备中,因此只需卸载构建并重新安装APK即可。

谢谢


是的,这是来自CommonsWare的更好更好的答案。谢谢
tres.14159

3

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

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

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


1

为了它的价值,在我的Cordova项目中添加了一个新插件后,我遇到了这个问题。我一直在进行cordova的构建,并通过USB直接在设备上安装。

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


1

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


0

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


0

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

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

解决方案是:

  • 关闭虚拟机
  • 使用vdfuse(读取/写入)挂载VDI映像
  • 修复Partition1图像文件e2fsck
  • 挂载并重启虚拟机

0

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


0

由于验证基于软件包的名称,因此您可以将config.xml或清单文件中的软件包名称更改为所需的其他名称。

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


0

我有这个问题,试图执行任务的gradle connectedDebugAndoidTest(或connectedAndroidTest上)Genymotion。在普通仿真器上运行它可以解决该问题。


我也在相同的情况下遇到了这种情况(使用Genymotion进行测试)。原来这与测试包的签名冲突。删除测试包即可解决问题。
D-C0d3r

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.