有没有办法在使用 Android Debug Bridge 安装应用程序时忽略 INSTALL_FAILED_VERSION_DOWNGRADE?

Posted

技术标签:

【中文标题】有没有办法在使用 Android Debug Bridge 安装应用程序时忽略 INSTALL_FAILED_VERSION_DOWNGRADE?【英文标题】:Is there any way to ignore INSTALL_FAILED_VERSION_DOWNGRADE on application install with the Android Debug Bridge? 【发布时间】:2012-11-04 05:29:13 【问题描述】:

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

【问题讨论】:

你的意思是,除了卸载新版本? 正确;我认为-r 标志会处理这个问题。 这个问题也适用于您(有些错误地)错误编号的构建的情况。例如。也许您的开发箱中的 v1.0 的 versionCode 比构建服务器中的 v2.0 更高。 【参考方案1】:

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

【讨论】:

尝试使用adb install -rd <apkfile>,但没有成功。您的 versino(选项分开)工作正常。谢谢! 而且它现在似乎已经记录在案了!只是不是你必须使用-r -d,-rd 将不起作用 自 Android 7 (Nougat) 起, adb install -d 不再有效,除非包被标记为可调试。 android.googlesource.com/platform/frameworks/base/+/921dd75 对我来说,当我做adb install -t -r -d app.apk时它工作了 @Darpan 所以对于已签名的 APK,不可能在新版本之上安装旧版本,对吧?【参考方案2】:

您可以尝试使用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 &lt;package&gt; 这对于降级也很有用,如果 adb -d 仍然像我一样抱怨的话。【参考方案3】:

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

【讨论】:

无法通过 Titanium Backup 恢复备份。全新安装不起作用。通过 APK 和/或 adb install 安装不起作用。这花了我 1.5 小时,而你的简单提示就成功了。谢谢! 这在以下情况下有所帮助:我卸载了一个应用程序并使用 Titanium Backup 恢复了旧版本。自动应用更新后,我尝试再次使用 TB 降级 > 挂起恢复;尝试手动安装 APK > 无法使用错误“未安装应用程序”。所以我的结论是,TB falesly 似乎在全球范围内为所有用户安装应用程序。三星 S9,Android 9。【参考方案4】:

就我而言,它是我的项目中包含的旧版 Google Play 服务。我正在使用安卓工作室。我在 SDK 上运行了更新,并导入了更新后的库,该错误就消失了。所以我的建议是:更新到您的项目引用的最新库。

【讨论】:

【参考方案5】:

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

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

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

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

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

android:versionCode="9109"

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

【讨论】:

'grep' 不是内部或外部命令、可运行程序或批处理文件。 grep 正在像 OS 一样的 Unix 上工作【参考方案6】:

尝试使用-卸载以前安装的应用版本-

adb uninstall com.package.name

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

【讨论】:

【参考方案7】:

您可能从一个单独的代码副本安装,其中版本号高于您现在使用的副本。无论哪种情况,请卸载当前安装的副本,或打开设置 > 应用程序以确定已安装应用程序的版本号,并在 AndroidManifest 中增加您的 versionCode 以更高。

【讨论】:

为什么这被否决了?这可能不是最好的答案,但对于新手来说,这似乎是一个可行的解决方案(也许是最简单的)! 让 cmets 得到这样的答案,因为它们必不可少不仅对于回答者,对于以后访问此问题的读者也是如此。 :-| 这当然是可以做到的。这已经很明显了。问题是询问是否有办法跳过此检查并允许降级。答案是肯定的。这个答案基本上说不。【参考方案8】:

这可能是 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.+'

【讨论】:

【参考方案9】:

卸载现有安装的应用程序。

检查您是否更改了项目包名称, 由于包名,它与现有应用程序发生冲突。

【讨论】:

【参考方案10】:

就我而言:

第 1 步:运行

yarn start --reset-cache

第 2 步:运行

yarn android

【讨论】:

【参考方案11】:

对于面临小米问题的人:

adb shell pm uninstall <package_name>

【讨论】:

这对任何事情都没有帮助,应该解释为什么需要这样做。

以上是关于有没有办法在使用 Android Debug Bridge 安装应用程序时忽略 INSTALL_FAILED_VERSION_DOWNGRADE?的主要内容,如果未能解决你的问题,请参考以下文章

AndroidStudio中debug.keystore文件不存在解决办法

android 获取手机信息工具类

AWS lambda:如果log4j.xml中不存在环境变量,有没有办法设置默认值?

Android 9.0 虚拟机连不了网的解决办法

从已安装该应用的设备中删除未发布的应用(Android)

[万能方法] Android Studio 调试出现 waiting for debugger的解决办法