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

我试图重新安装一个apk

$adb install -r new.apk 

并显示错误:

 Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] 

一个解决scheme是卸载并安装new.apk,工作正常。

但是我想知道我是否可以重新构build一个apk并重新安装而不需要卸载。 例如。 更改AndroidManifest.xml中的某个configuration,或者不签名APK等

如果你能告诉我“INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES”的全部含义,那将是非常值得赞赏的。

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

我在一个新的Xoom上testing时遇到了这个问题。 我以前从市场上安装了我的应用程序。 后来在试图testing新版本的应用程序时,我遇到了这个错误。

我通过删除通过市场安装的应用程序来解决它(只要按住并拖动到垃圾箱)。 此后,我能够部署我的开发版本没有任何问题。

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

 adb uninstall <package name> 

这发生在我身上时,团队中的另一位开发人员在我正试图部署的硬件设备上构build我们的应用程序。 从硬件卸载应用程序修复了我的问题。

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

我在编写更新时更改了软件包名称,以便通过Eclipse在我的设备上进行debugging,而不删除已安装的旧版本。 没有恢复我试图重新安装时使用的软件包名称,我得到了同样的错误。 使用相同的软件包名称重新安装成功。

只需从设备上删除旧版本,然后重新安装。 由于device.keystore已经存在于设备中,所以只需卸载构build并重新安装APK就可以了。

谢谢

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

然后我删除了/system/app目录下的apk文件(需要root权限),然后尝试卸载并成功。

之后,我尝试重新安装apk,它的工作。

为了什么是值得的,我添加了一个新的插件到我的cordova项目后遇到了这个问题。 我一直在build立cordova并通过USB直接安装在设备上。

我通过从设备上卸载应用程序进行修复,在下一次部署时没有任何问题。

如果在输出窗口中发生错误“Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]”的Andorid设备或模拟器遇到部署失败,只需删除设备或模拟器上的现有应用程序并重新部署即可。 debugging版本将使用debugging证书,而版本构build将使用您configuration的证书。 这个错误只是让你知道安装在设备上的应用程序的证书不同于你正在尝试安装的应用程序的证书。 在非开发(应用程序商店)的情况下,这可能是一个损坏的或以其他方式修改的应用程序安装在设备上不安全的指标。

上面的东西没有为我工作。 对我来说,问题是我的Java编译path中的android-support-v7-appcompat的源代码不对。 当你去到项目>构buildpath>configuration构buildpath>。 在Source选项卡下,确保你有android-support-v7-appcompat / gen,android-support-v7-appcompat / libs和android-support-v7-appcompat / src。 点击确定,它应该工作。

我今天也有同样的错误,但问题并不完全一样。 我正在使用安装在VirtualBox的 Android的ADB。 我试图安装我的应用程序的不同版本(签名/未签名,debugging/释放模式),并得到两个错误: INSTALL_FAILED_UID_CHANGEDINSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES

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

解决scheme是:

  • closures虚拟机
  • vdfuse (读/写)装载VDI映像
  • e2fsck修复Partition1映像文件
  • 卸载并重新启动虚拟机

我有同样的问题,直到我意识到我有模拟器运行和adb试图安装在那

由于validation是基于软件包名称的,因此可以在config.xml或manifest文件中更改软件包名称以获取所需的其他名称。

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

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