【问题标题】:Android Emulator: Installation error: INSTALL_FAILED_VERSION_DOWNGRADEAndroid 模拟器:安装错误:INSTALL_FAILED_VERSION_DOWNGRADE
【发布时间】:2021-10-14 09:58:02
【问题描述】:

我目前正在尝试编译和测试一个小型 Android 应用程序。

我正在使用 Eclipse,并安装了 SDK 4.2(Api 级别 17)。 我已经设置了

<uses-sdk android:targetSdkVersion="17" android:minSdkVersion="8" />

虽然我也尝试过不同的值(即 17/17)。

我不使用任何 GoogleAPI 函数,也不使用 API 级别 8 中不可用的函数。或者至少在这方面我没有收到任何编译错误或警告。

当我编译项目并在运行 Android 2.2.1 的真实设备上运行它时,应用程序运行良好。但是,当我尝试在具有 Android 4.2、Api Level 17 的模拟器(Android 虚拟设备)上运行应用程序时,出现以下错误:

[2012-12-10 21:10:29 - SoftKeyboard] Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
[2012-12-10 21:10:29 - SoftKeyboard] Please check logcat output for more details.
[2012-12-10 21:10:29 - SoftKeyboard] Launch canceled!

然而,Logcat 是空的。我真的不知道,这个错误甚至意味着什么......

【问题讨论】:

    标签: java android sdk


    【解决方案1】:

    这意味着您尝试安装的应用与已安装在模拟器上的应用具有相同的 packageName,但您尝试安装的应用具有较低的 versionCode(您的版本号的整数值)。

    您可能从一个单独的代码副本安装,其中版本号高于您现在使用的副本。无论哪种情况,都可以:

    • 卸载当前安装的副本

    • 或打开手机的设置 > 应用程序管理器以确定已安装应用程序的版本号,并在 AndroidManifest 中将&lt;manifest android:versionCode 递增到更高。

    • https://stackoverflow.com/a/13772620/632951

    【讨论】:

    • 谢谢!正是这样 - 我使用旧 SDK 中的软键盘示例进行了实验,并且似乎已经在模拟器设备中安装了软键盘示例(默认情况下?!)(但在不同的更高版本中)。重命名我的应用程序后,一切都按预期工作......
    • @Alexander:你能更新这个答案以包含 -d 标志吗?
    • 不需要卸载应用。使用标志:-r -d 这些标志意味着重新安装和降级。
    • @petrsyn:在 Eclipse 中我应该把这些标志放在哪里?
    • @VioletGiraffe 在命令行中使用:adb install -r -d Application.apk
    【解决方案2】:

    您也可以考虑在 adb install 中添加-d 标志。它应该忽略这个错误。

    adb install -r -d abc.apk
    

    【讨论】:

    • 未记录但似乎有效。我不得不将它单独写为 -d,将它与 -r 结合起来,因为 -rd 不起作用。
    • 现在记录在案:-d: allow version code downgrade。还是需要和-r分开的
    • 来自文档(2020):-d: allow version code downgrade (debuggable packages only)
    【解决方案3】:

    首先从模拟器中卸载您的应用程序:

    adb -e uninstall your.application.package.name
    

    然后尝试再次安装应用程序。

    【讨论】:

    • 或者对于连接的物理设备,adb -s DEVICESERIALNUMBER uninstall your.application.package.name,其中DEVICESERIALNUMBER可以使用adb devices -l找到。
    • 如果您只想调试应用程序,这似乎是一个不必要的步骤。
    【解决方案4】:

    这发生在我的项目中,因为我使用 XML 资源来设置版本代码。

    AndroidManifest.xml:
    android:versionCode="@integer/app_version_code"
    
    app.xml:
    <integer name="app_version_code">64</integer>
    

    adb 的早期版本中这不是问题,但是,从platform-tools r16 开始,这不再被解析为正确的整数。您可以使用adb -r 强制重新安装,也可以通过在清单中使用文字来完全避免该问题:

    android:versionCode="64"
    

    【讨论】:

    • 这对我来说是个问题,我同意它没有正确解析 versionCode,即使增加它(例如:65)也不能避免 INSTALL_FAILED_VERSION_DOWNGRADE
    【解决方案5】:

    当尝试在来自 Play 商店的已签名发布 APK 之上安装调试/未签名 APK 时,可能会发生这种情况。

    H:\>adb install -r "Signed.apk"
    2909 KB/s (220439 bytes in 0.074s)
            pkg: /data/local/tmp/Signed.apk
    Success
    
    H:\>adb install -r "AppName.apk"
    2753 KB/s (219954 bytes in 0.078s)
            pkg: /data/local/tmp/AppName.apk
    Failure [INSTALL_FAILED_VERSION_DOWNGRADE]
    

    解决这个问题的方法是uninstall,然后从 IDE 重新安装或重新运行它。

    【讨论】:

    • 我不是反对者,但我想这不是发生这种情况的唯一原因。
    【解决方案6】:

    INSTALL_FAILED_VERSION_DOWNGRADE

    所有 Android 应用都有一个包名。包名唯一标识设备上的应用程序。如果与设备上已安装的应用相同的packageName,则此错误正在显示。

    1. 您可以先从您的设备卸载应用程序,然后 然后安装新的。
    2. 每次发布​​新版本时,您只需将数字加一

    【讨论】:

    • 您是正确的,版本代码必须在每个版本上增加。但是,不是在发布之前的开发时间。此外,您应该能够在已安装的 apk 之上安装具有相同 versionCode 的 apk(无需卸载)。我的预感是问题是资源引用的版本代码 - 请参阅:stackoverflow.com/a/14946938/431296
    【解决方案7】:

    在棉花糖中,我得到了这个错误,

    Installation error: INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE
    Please check logcat output for more details.
    Launch canceled!
    

    寻找解决方案我搜索并来到这里。 我删除了应用程序,但在 Nexus 6 中仍然有这个问题。后来发现,

    Settings > Apps > [My app name] have to removed for all user. 
    

    【讨论】:

      【解决方案8】:

      根据来自...\android-22\android\content\pm\PackageManager.java的sdk src代码

      /**
       * Installation return code: this is passed to the {@link IPackageInstallObserver} by
       * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)} if
       * the new package has an older version code than the currently installed package.
       * @hide
       */
      public static final int INSTALL_FAILED_VERSION_DOWNGRADE = -25;
      

      如果新包的版本代码比当前安装的包旧。

      【讨论】:

      • 不应该发生在相同的版本代码中
      【解决方案9】:

      我遇到了同样的问题。当我尝试在我的 android 设备不是模拟器中运行时出现错误。

      sudo ionic run android 
      

      我可以通过运行来解决这个问题

      adb uninstall com.mypackage.name
      

      【讨论】:

        【解决方案10】:

        你可以试试这个: adb install -r -d -f your_Apk_path

        【讨论】:

          【解决方案11】:

          当我将 Android Studio 应用程序导入 eclipse 时,我发生了这种情况。

          我发现从 android studio 项目导入时需要稍微修改 andoridmanifest.xml 文件。我创建了一个新的测试项目,并复制了标题以使其匹配。瞧,问题解决了。

          【讨论】:

            【解决方案12】:

            这个错误出现在我的带有多种 gfx 文件的 android 项目中。最后没有接受清单文件的任何更改。

            由于我对 Android 设备缺乏了解,我忘记了我的测试设备有第二个用户。此用户还安装了我的应用程序版本,因此我还必须删除此用户帐户的应用程序,它可以工作。

            【讨论】:

              【解决方案13】:

              我遇到了同样的问题。我安装了

                  adb shell pm install --user <userId> test.apk
              

              由于某种原因,屏幕上没有图标。这是一个调试版本,所有其他连续安装都不起作用。只需卸载软件包即可。

                   adb uninstall com.package.name
              

              【讨论】:

                【解决方案14】:

                一直让我感到沮丧的是,我不知道这个应用程序是为我的访客帐户安装的(尽管我已经为其他帐户卸载了它..)

                所以我在应用管理器中搜索了该应用,然后简单地点击了所有用户的卸载

                【讨论】:

                  【解决方案15】:

                  只需卸载以前的 Apk 并安装更新的 APK

                  【讨论】:

                    【解决方案16】:

                    这可能是 Google Play 服务依赖项的问题,而不是实际的应用版本问题。

                    有时,情况并非如此:

                    a) 已安装应用的现有版本,无论是否更新 b) 设备上的另一个用户帐户上安装了应用的现有版本

                    所以错误信息只是假的。

                    就我而言,我有:

                    implementation 'com.google.android.gms:play-services-maps:16.0.0'
                    implementation 'com.google.android.gms:play-services-location:16.0.0'
                    implementation 'com.google.android.gms:play-services-gcm:16.0.0'
                    

                    但是当我尝试时

                    implementation 'com.google.android.gms:play-services-maps:17.0.0'
                    implementation 'com.google.android.gms:play-services-location:17.0.0'
                    implementation 'com.google.android.gms:play-services-gcm:17.0.0'
                    

                    我遇到了与 androidX 相关的错误,因为我还没有升级到 androidX 并且还没有准备好这样做。我发现使用最新的 16.x.y 版本可以工作,并且我不再收到错误消息。此外,我可以等到我准备好后,再升级到 androidX。

                    implementation 'com.google.android.gms:play-services-maps:16.+'
                    implementation 'com.google.android.gms:play-services-location:16.+'
                    implementation 'com.google.android.gms:play-services-gcm:16.+'
                    

                    【讨论】:

                      【解决方案17】:

                      执行以下操作:

                      1. 只需卸载以前版本的应用程序
                      2. 重新运行命令
                      3. 享受:)

                      【讨论】:

                        【解决方案18】:

                        从设备上卸载您当前的 apk 然后运行

                        sudo adb uninstall com.package.name
                        

                        这是通过电脑卸载apk的命令。

                        然后重试构建

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 2017-03-04
                          • 1970-01-01
                          • 2014-01-05
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多