Android 模拟器:安装错误:INSTALL_FAILED_VERSION_DOWNGRADE

Posted

技术标签:

【中文标题】Android 模拟器:安装错误:INSTALL_FAILED_VERSION_DOWNGRADE【英文标题】:Android Emulator: Installation error: INSTALL_FAILED_VERSION_DOWNGRADE 【发布时间】:2012-11-28 07:37:43 【问题描述】:

我目前正在尝试编译和测试一个小型 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 是空的。我真的不知道,这个错误甚至意味着什么......

【问题讨论】:

【参考方案1】:

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

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

卸载当前安装的副本

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

或https://***.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,则此错误正在显示。

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

【讨论】:

你是对的,版本代码必须在每个版本上增加。但是,不是在发布之前的开发时间。此外,您应该能够在已安装的 apk 之上安装具有相同 versionCode 的 apk(无需卸载)。我的预感是问题是资源引用的版本代码 - 请参阅:***.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】:

执行以下操作:

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

【讨论】:

【参考方案18】:

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

sudo adb uninstall com.package.name

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

然后重试构建

【讨论】:

以上是关于Android 模拟器:安装错误:INSTALL_FAILED_VERSION_DOWNGRADE的主要内容,如果未能解决你的问题,请参考以下文章

Android模拟器:安装错误:INSTALL_FAILED_VERSION_DOWNGRADE

错误记录Android 模拟器安装应用报错 ( INSTALL_FAILED_INSUFFICIENT_STORAGE )

在电脑上装了安卓模拟器,安装软件时打开CMD,输入adb install 加路径。显示找不到***apk

INSTALL_FAILED_INVALID_APK错误,调试版本代码1与0不一致

Android 中的 INSTALL_FAILED_MISSING_SHARED_LIBRARY 错误

如何实现android静默安装