有没有办法在使用 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 <package>
。
这对于降级也很有用,如果 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文件不存在解决办法