在使用Android调试桥安装应用程序时,是否有任何方法可以忽略INSTALL_FAILED_VERSION_DOWNGRADE?


121

似乎最新的Android 4.2在尝试安装较低版本的APK时在安装时引入了此错误情况。在以前的Android版本中,只需通过即可安装较旧的APK adb install -r <link to APK>。出于调试目的,我经常需要重新测试较旧的APK;并且该-r标志将替换旧版Android中的旧版。有一种解决方法在这里忽略[INSTALL_FAILED_VERSION_DOWNGRADE]吗?


您的意思是,除了卸载较新的版本?
CommonsWare

正确; 我以为-r旗帜会处理这个。
AaronMT

5
对于您(有些不正确)构建编号错误的情况,此问题也有效。例如,也许开发者箱中的v1.0比版本服务器中的v2.0具有更高的versionCode。
parkerfath 2014年

Answers:


288

看来最新版本的adb工具具有“允许降级标志”,该标志未在adb帮助中显示,但在设备的“ pm”帮助中显示。因此使用: adb install -r -d <link to apk>


3
尝试了adb install -rd <apkfile>哪些不起作用。您的versino(选项分开)工作正常。谢谢!
MarSoft

1
而且现在似乎已记录在案!只是不是您必须使用-r -d,-rd无法使用
plaisthos

例如,要卸载(降级)Waze 4.0.0.2并安装版本3.9.5.3:adb install -r -d Waze_3.9.5.3.apk。这样您就不会丢失应用程序数据。
Derek Gogol

12
从Android 7(牛轧糖)开始,除非将该软件包标记为可调试,否则adb install -d不再起作用。android.googlesource.com/platform/frameworks/base/+/921dd75
达潘(Darpan)

20

您可以尝试使用adb uninstall -k <package>并安装较旧的apk。从adb使用指南中:

  adb uninstall [-k] <package> - remove this app package from the device
                                 ('-k' means keep the data and cache directories)

我自己用apk尝试了一下,它似乎适用于大多数数据(未保存某些数据(如RawContacts))


看来该命令实际上并未执行卸载,而只是发出警告。实际执行此命令的命令似乎是adb shell pm uninstall -k <package>
Paul Lammertsma

如果adb -d仍然像我这样抱怨,这对于降级也很有用。
指针为空

14

您是否在设备上启用了多个帐户(并通过ADB推送了APK)?如果是这样,您必须删除每个帐户中的apk。完全卸载后,您的推送将确定。


通过Titanium Backup还原备份无效。全新安装无效。无法通过APK和/或adb安装进行安装。这花费了我1.5小时,而您的简单提示就可以解决问题。谢谢!
bentolor

3

就我而言,这是我项目中随附的陈旧版本的Google Play服务。我正在使用Android Studio。我在SDK上运行了一个更新,并导入了更新的库,然后该错误消失了。所以我的建议是:更新到项目引用的最新库。


1

尝试使用以下方法卸载以前安装的应用版本:

adb uninstall com.package.name

然后再次安装/运行您的应用


0

您可能是从单独的代码副本安装的,其版本号高于当前使用的副本。无论哪种情况,都请卸载当前安装的副本,或打开“设置”>“应用”以确定已安装的应用的版本号,然后在AndroidManifest中将versionCode递增为更高。


1
为什么这被否决?这可能不是最佳答案,但是对于刚接触此方法的人来说,这似乎是可行的解决方案(也许是最简单的方法)!为这样的答案留下评论,因为它们不仅对于回答者来说是必不可少的,对于以后访问此问题的读者来说也很重要。:-|
jedd.ahyoung 2014年

这当然是可以做的。已经很明显了。问题是询问是否有一种方法可以跳过此检查并允许降级。答案是肯定的。这个答案基本上说不。
tasomaniac

0

我也遇到了同样的问题,可以通过以下步骤解决,这比从设备上删除任何APK更加容易-

1)在终端上运行命令“ adb logcat | grep -i版本”

2)查找特定行,该行将显示在logcat的末尾-

"Downgrade detected: Update version code 5011  is older than current 9109"

3)复制当前版本(例如9109)并将其粘贴到AndroidManifest.xml中,如下所示-

android:versionCode="9109"

现在,清理并重建应用程序,它应该可以正常工作。


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.+'

-3

对于面临小米问题的人们:

adb shell pm uninstall <package_name>

这没有任何帮助,应该解释为什么需要这样做。
Benyamin Limanto
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.