【问题标题】:Manually installing an updated APK fails with "signatures do not match the previously installed version"手动安装更新的 APK 失败并显示“签名与先前安装的版本不匹配”
【发布时间】:2015-10-07 23:40:00
【问题描述】:

我创建了一个愚蠢的应用程序来与几个朋友分享。无需在应用商店上架。

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

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

signatures do not match the previously installed version

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

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

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

【问题讨论】:

标签: android


【解决方案1】:

是的,如果您的旧应用程序没有被 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 在这种情况下是您必须用来卸载的包的名称。

【讨论】:

  • 这确实是问题所在。我确实直接从 Android Studio 在手机上部署了一次。这个版本似乎没有被正确删除。最后一个问题:有没有办法从 Android Studio 做到这一点?还是直接从那里运行 adb?
  • 是的,只需尝试学习如何从您的 android 应用程序执行 shell 命令。这个线程是一个很好的起点:stackoverflow.com/questions/20932102/…
  • nonono。没有从我的应用程序运行命令;)我想知道我是否可以直接从“Android Studio”运行adb
  • 这对于开发人员来说很好。但是对于任何最终用户,如果出现同样的问题,那么您需要遵循:问题是在较新版本的 Android 中,以某种方式卸载只会卸载对于该特定用户。答案是转到设置 > 应用程序 > 进入特定应用程序,然后从右上角的“...”菜单项中选择“为所有用户卸载”。
  • 发生在我身上是因为我更改了包名。卸载成功了
【解决方案2】:

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

有效的是

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

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

【讨论】:

  • 是的,如果您的设备上有多个用户帐户并且应用程序安装在多个帐户上,也会发生这种情况。如果您为一个用户卸载它,它只会从该帐户“取消链接”。但它仍然在磁盘上。只有当每个用户都卸载它时,它才会被完全删除。
  • “为所有用户卸载”运行良好。删除所有其他用户)))
  • 我只看到“卸载”而不是“为所有用户卸载”使用模拟器像素 3 29
【解决方案3】:

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

这里的方法是编辑AndroidManifest.xml 并增加<manifest>tag(这是根元素)中的android:versionCodeattribute。

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

【讨论】:

  • 这个问题实际上是由于我在开发过程中通过 android studio 在设备上安装应用程序引起的。重建一个新的 APK 并分发它对除了我之外的每个人来说都很好。所以 adb 解决方案就OK了。
【解决方案4】:

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

adb uninstall your.broken.package.test

如果你只是通过卸载

adb uninstall your.broken.package

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

【讨论】:

    【解决方案5】:

    从您的手机或模拟器中卸载旧应用并尝试再次运行。

    【讨论】:

    • 这不是答案。 SO表示他已经尝试过了,问题仍然存在。
    【解决方案6】:

    我在签名证书时尝试安装发行版时遇到了这个错误。

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

    【讨论】:

      【解决方案7】:

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

      adb uninstall "com.yourapp.yourapp"
      

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

      【讨论】:

        【解决方案8】:

        如果您要安装具有不同签名的同一个应用程序,您可能希望卸载但保留该应用程序的数据。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-06-02
          • 2018-08-14
          • 2021-01-13
          • 1970-01-01
          • 2018-09-20
          • 2022-12-13
          • 1970-01-01
          • 2012-03-12
          相关资源
          最近更新 更多