手动安装更新的 APK 失败并显示"signatures do not match the previously installed version"



我做了一个愚蠢的应用程序,在几个朋友之间分享。不需要把它放在app-store上。

我建立了第一个apk(签名),并将其上传到web服务器,一切都运行良好。

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

signatures do not match the previously installed version

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

但是我仍然得到上面的错误信息。

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

是,如果你的旧应用程序没有100%被删除或它的数据没有被删除,这是可能的。

试题:

adb uninstall "com.yourapp.yourapp"

如果你不知道到底是什么让com.yourapp替代"。你的应用程序",然后你只要打开Android studio,运行你的应用程序,当它连接到一个设备,然后看看调试窗口。

上面写着:

 Waiting for device.
 Target device: samsung-sm_t531-xxxxxxxxx
 Uploading file
 local path: C:Usersmyappappbuildoutputsapkmyapp.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是你必须用来卸载的包的名字

我有同样的问题,adb uninstall解决方案不适合我。

起作用的是

  • 在您的设备上进入设置->应用程序
  • 选择你的应用程序,在菜单中选择"卸载所有用户"

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

对我来说,如果应用程序是要分发的,adb解决方案是一个不去:你不能要求你的朋友在他们的机器上安装android sdk !

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

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

如果您在进行连接测试时看到这种情况,请确保包含。test当通过adb卸载时,因为通过app -> settings 不会摆脱测试包

adb uninstall your.broken.package.test

如果你只是通过

卸载
adb uninstall your.broken.package

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

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

我在试图安装版本时遇到了这个错误,同时签署了它的证书。

修复了:app Gradle任务uninstallRelease然后再installRelease

如果你要用不同的签名安装同一个应用程序,你可能想要卸载但保留应用程序的数据。

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

对于遇到这个问题的Unity用户来说,最好的答案确实是@Ehsan的答案

adb uninstall "com.yourapp.yourapp"

我已经在我的Android设备上安装了一个以前的版本,然后在Unity> Build Settings中选择Development Build,这导致APK使用不同的签名。如果你通过Android GUI安装,它实际上不会删除所有内容,所以你必须使用ADB。

我在开发flutter应用程序时遇到了POCO Mobile和Moto G30 Mobile的相同问题

我的解决方案是:

我已经打开android项目自动创建在您的项目,在android工作室和运行项目在连接的设备。它会自动要求卸载具有相同包名和不同签名的旧应用程序。点击ok按钮后,它将安装应用程序。

最新更新