手动安装更新的APK失败,并显示“签名与先前安装的版本不匹配”


81

我建立了一个愚蠢的应用程序,可以在几个朋友之间共享。无需将其放在应用商店中。

我构建了第一个apk(签名),并将其上传到Web服务器,并且一切正常。

出现了一个小问题,我对其进行了修复,重建,使用相同的密钥库签名并再次上传。现在看来,我无法从新安装apk。调试器告诉我:

signatures do not match the previously installed version

因此,我通过打开应用程序抽屉并将其拖动到“卸载”按钮上来卸载了旧版本。打开“设置->应用”时,我再也看不到它了。我在设备上看不到该应用程序的任何痕迹。

但是我仍然收到上述错误消息。

是否仍有一些信息仍在设备上的某个地方徘徊?有什么办法可以验证吗?


Answers:


166

是是如果不知何故不能100%删除旧应用程序或未删除其数据,则可能发生。

尝试:

adb uninstall "com.yourapp.yourapp"

如果您不确切知道要替换“ com.yourapp.yourapp”的内容,则只需打开Android Studio,在连接到设备的状态下运行应用程序,然后查看“调试”窗口。

它说:

 Waiting for device.
 Target device: samsung-sm_t531-xxxxxxxxx
 Uploading file
 local path: C:\Users\myapp\app\build\outputs\apk\myapp.apk
 remote path: /data/local/tmp/com.myapp.myapp
 Installing com.myapp.myapp
 DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/com.myapp.myapp"
 pkg: /data/local/tmp/com.myapp.myapp
 Success

com.myapp.myapp在这种情况下是您必须用来卸载的软件包的名称。


1
这确实是问题所在。我确实直接从Android Studio在电话上部署了它。似乎此版本未正确删除。最后一个问题:Android Studio有没有办法做到这一点?还是直接从那里运行adb?
2015年

是的,只是尝试学习如何从您的android应用程序执行shell命令。该线程是一个很好的起点:stackoverflow.com/questions/20932102/...
伊赫桑

不不不。没有从我的应用程序运行命令;)我想知道是否可以adb直接从“ Android Studio”运行。
2015年

2
但是对于任何最终用户,如果发生相同的问题,则需要遵循以下步骤:问题是,在较新版本的Android中,以某种方式进行卸载仅针对该特定用户进行卸载。答案是转到“设置”>“应用程序”>“进入特定应用程序”,然后从右上方的“ ...”菜单项中选择“为所有用户卸载”。
AnkitRox

发生我的原因是我更改了程序包名称。卸载成功了
Guy Sopher

23

我遇到了同样的问题,该adb uninstall解决方案对我不起作用。

起作用的是

  • 在设备上,转到“设置”->“应用”
  • 选择您的应用,然后在菜单中选择“为所有用户卸载”

即使我以前已经卸载了该应用程序,它仍然在列表中。


是的,如果您的设备上有多个用户帐户,并且该应用程序安装在多个帐户上,则也会发生这种情况。如果您为一个用户卸载它,则只会从该帐户“取消链接”。但是它仍然保留在磁盘上。仅当每个用户都将其卸载后,它才会被完全删除。
exhuma '16

1
“为所有用户卸载”效果很好。删除了所有其他用户)))
Inoy,2013年

我只使用模拟器像素看到“卸载”而不是“为所有用户卸载” 3 29
Julie Pixie

6

对我来说,如果要分发该应用程序,那么adb解决方案是不行的:您不能让自己的朋友在他们的计算机上安装android sdk!

进行此操作的方法是编辑AndroidManifest.xml并增加标记(是根元素)中的android:versionCode属性<manifest>

这将更新您已安装的应用程序


1
该问题实际上是由于我在开发过程中通过android studio在设备上安装了该应用程序引起的。重建新的APK并将其分发对我以外的所有人来说都很好。因此,adb解决方案还可以。
exhuma

4

如果在执行连接的测试时看到此消息,请确保在通过adb卸载时包括.test,因为通过app-> settings卸载不会摆脱测试包

adb uninstall your.broken.package.test

如果您只是通过卸载

adb uninstall your.broken.package

您的测试包仍然存在。这只是我在使用gradle命令行时注意到的东西,尚未在android studio中遇到此问题


3

从您的手机或仿真器上卸载旧应用,然后尝试再次运行。


这不是答案。SO表示他已经尝试过了,问题仍然存在。
BenRoob

1

在签署证书时尝试安装发行版时出现错误。

已通过:app Gradle任务uninstallRelease修复,然后再次安装


0

对于遇到此问题的Unity用户,最佳答案的确是@Ehsan给出的答案。

adb uninstall "com.yourapp.yourapp"

我已经在Android设备上安装了先前版本,然后Development Build在Unity>构建设置中选择了该版本,这导致APK使用其他签名。如果通过Android GUI安装,它实际上并不会删除所有内容,因此您必须使用ADB。

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.