我已经从CyanogenMod 9编译了Trebuchet launcher,并试图用adb安装它:

$ adb install out/target/product/generic/system/app/Trebuchet.apk
3986 KB/s (7870141 bytes in 1.928s)
    pkg: /data/local/tmp/Trebuchet.apk
Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]

我用CM9试了Nexus S,用JB试了Galaxy Nexus。为什么我得到这个错误?

编辑:在我的情况下,我尝试用包管理器重新安装系统包。这是不支持的,所以我得到这个错误。在不同的情况下,错误的来源可能不同。


当前回答

这可能是因为你的设备中有多个用户,而你刚刚删除了其中一个用户的应用程序(为其他用户保留apk)。

我在所有账户上都删了,之后就有用了。

其他回答

转到:您的adb文件夹\sdk\platform-tools\ 键入cmd 类型:adb remount on命令窗口 亚行壳 苏 rm /系统/应用程序/ YourApp.apk 重新启动设备

问题是为什么他会得到这个错误。卸载将解决这个问题,但在我的情况下,当我安装apk的编译版本时,问题就出现了。我在试着更新我的应用程序。所以我做了什么,我建立了一个签名的apk,然后尝试安装apk, apk安装完美。因此,我不得不删除旧的apk,而是签署更新后再安装它。

如果APK是内置在Android项目中。可文件。可能是因为签名证书被更改了。

在我的问题中,我添加了LOCAL_CERTIFICATE:=平台。因为原来的apk签名时没有这个标签。

如果您试图从不同于最初的计算机上进行调试,则会得到可怕的install_failed_update_compatible错误。但是,有一种方法可以在不卸载应用程序和丢失数据的情况下进行。

查看如何传输调试文件。这样您就不会得到“该设备已经有一个具有相同应用程序但签名不同的应用程序”的消息。为了继续,你必须卸载现有的应用程序。”(并丢失你的数据)。请参见在另一台机器上使用相同的调试更新应用程序。android中的密钥存储库

如果使用不同的证书签署应用程序,就会发生这种情况。你可以用

adb install -r myapk.apk

覆盖您设备上现有的apk,但如果您使用与已安装的apk不同的证书签署新的apk,则仍然会得到错误。

在这种情况下,在尝试安装之前,您需要从设备上卸载apk。但是,这也会影响您的应用程序,因为您原来的签名可能绑定到某些Developor API,因此您可能需要使用新的凭据更新控制台。