手动安装更新的APK失败,其中"签名与之前安装的版本不匹配"

时间:2015-07-18 09:07:27

标签: android

我已经建立了一个愚蠢的应用程序,以便在几个朋友之间分享。无需将其放在app-store上。

我构建了第一个apk(已签名),将其上传到网络服务器并且运行良好。

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

signatures do not match the previously installed version

所以我通过打开app抽屉并将其拖到"卸载"来卸载旧版本。按钮。打开"设置 - >应用",我再也看不到它了。我的设备上没有看到应用程序的任何痕迹。

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

是否有可能某些信息仍然存在于设备某处?有什么方法可以验证吗?

9 个答案:

答案 0 :(得分:145)

是的,如果您的旧应用程序未被100%删除或其数据未被删除,则有可能。

尝试:

adb uninstall "com.yourapp.yourapp"

如果您不确切知道要替换“com.yourapp.yourapp”,那么您只需打开Android工作室,在连接到设备时运行您的应用程序,然后查看“调试”窗口。

它说:

 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 :(得分:22)

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

有效的是

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

即使我之前已经卸载了应用程序,它仍然在那里的列表中。

答案 2 :(得分:5)

对我而言,如果要分发应用程序,adb解决方案是禁止的:您无法请求其朋友在其计算机上安装Android sdk !

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

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

答案 3 :(得分:4)

如果您在进行连接测试时看到这一点,请确保在通过adb卸载时包含 .test ,因为通过应用程序卸载 - >设置摆脱测试包

adb uninstall your.broken.package.test

如果您只是通过

卸载
adb uninstall your.broken.package

您的测试包仍然存在。这只是我在使用gradle命令行时注意到的,避免在android studio中遇到这个问题

答案 4 :(得分:3)

从手机或模拟器中卸载旧应用并尝试重新运行。

答案 5 :(得分:0)

我在签署证书时尝试安装版本时遇到了这个错误。

使用:app Gradle任务uninstallRelease修复,然后再次安装发布

答案 6 :(得分:0)

对于遇到此问题的Unity用户,最好的答案确实是@Ehsan上面的答案

adb uninstall "com.yourapp.yourapp"

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

答案 7 :(得分:0)

从移动设备上卸载应用程序并再次运行它为我解决了这个问题。

答案 8 :(得分:0)

如果您要安装具有不同签名的相同应用,您可能需要卸载但保留应用数据。

adb -d shell pm uninstall -k <packageName>
adb -d install -r -t -d app.apk