Android模拟器:安装错误:INSTALL_FAILED_VERSION_DOWNGRADE


142

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

Answers:


353

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

您可能是从单独的代码副本安装的,其版本号高于当前使用的副本。无论哪种情况,都可以:

  • 卸载当前安装的副本

  • 或打开手机的“设置”>“应用程序管理器”来确定已安装应用程序的版本号,然后<manifest android:versionCode 在AndroidManifest中将其递增为更高版本。

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


1
谢谢!确实是这样-我在较旧的SDK中试用了Softkeyboard示例,并且似乎已经在模拟器设备中安装了Softkeyboard示例(默认情况下?!)(但在其他更高版本中)。重命名我的应用程序后,一切都按预期工作……
ndbd 2012年

2
@亚历山大:您可以更新此答案以包含-d标志吗?
大卫·阿尔维斯

8
不需要卸载该应用程序。使用标志:-r -d这些标志表示重新安装和降级。
petrsyn 2015年

1
@petrsyn:我将这些标志放在Eclipse的什么位置?
紫罗兰色长颈鹿2015年

2
@VioletGiraffe它在命令行中使用:adb install -r -d Application.apk
petrsyn 2015年

61

您也可以考虑将-d标志添加到adb安装。它应该忽略此错误。

adb install -r -d abc.apk

8
未记录,但似乎可以使用。我不得不将其单独编写为-d,并将其与-r结合使用,因为-rd不起作用。
mhsmith 2014年

3
现在已记录在案:-d: allow version code downgrade。仍然需要与-r
wisbucky

1
来自文件(2020): -d: allow version code downgrade (debuggable packages only)
Alex.K.

30

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

adb -e uninstall your.application.package.name

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


8
或对于已连接的物理设备,可以使用adb -s DEVICESERIALNUMBER uninstall your.application.package.name在哪里DEVICESERIALNUMBER找到adb devices -l
乔尔·普拉

如果您只想调试应用程序,这似乎是不必要的步骤。
IgorGanapolsky '16

8

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

AndroidManifest.xml:
android:versionCode="@integer/app_version_code"

app.xml:
<integer name="app_version_code">64</integer>

在的早期版本中这不是问题adb,但是,从platform-toolsr16开始,不再将其解析为适当的整数。您可以adb -r使用清单文件中的文字来强制重新安装,也可以完全避免该问题:

android:versionCode="64"

这对我来说是个问题,我同意它无法正确解决versionCode,即使增加它(例如65)也无法避免INSTALL_FAILED_VERSION_DOWNGRADE
Stan Kurdziel

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]

解决方案是先卸载然后再从IDE重新安装或重新运行它。


我不是拒绝投票的人,但是我想这不是发生这种情况的唯一原因。
维卡里2015年

3

INSTALL_FAILED_VERSION_DOWNGRADE

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

  1. 您可以先从设备上卸载该应用程序,然后再安装新的应用程序。
  2. 每次发布新版本时,您只需增加一个即可

1
您是正确的,必须在每个发行版中增加versionCode。但是,不是在发布之前的开发时间。另外,您应该能够在已安装的APK之上安装具有相同versionCode的APK(无需卸载)。我的直觉是问题是资源引用的versionCode-请参阅:stackoverflow.com/a/14946938/431296
Stan Kurdziel

3

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

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. 

2

根据来自... \ 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;

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


不应使用相同的versionCode发生
Stan Kurdziel

2

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

sudo ionic run android 

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

adb uninstall com.mypackage.name

2

您可以尝试以下方法: adb install -r -d -f your_Apk_path


1

当我将Eclipse导入Android Studio应用程序时,这发生了。

我发现从Android Studio项目导入时,需要对andoridmanifest.xml文件进行一些修改。我创建了一个新的测试项目,并将其复制到标题上以使其匹配。瞧,问题解决了。


1

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

因为我对Android设备的了解不足,所以我忘记了我的测试设备还有第二个用户。该用户还具有我的应用程序的已安装版本,因此我也必须为此用户帐户删除该应用程序,并且该软件可以运行。


0

一直杀我的原因是我不知道该应用程序是为我的来宾帐户安装的(尽管我已为其他帐户卸载了该应用程序。)

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

在此处输入图片说明



0

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.xy版本是可行的,并且不再收到错误消息。此外,我可以等到准备就绪后再升级到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.+'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.