You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用adb install安装非可调试APK时如何允许版本降级?

使用adb install安装非可调试APK时如何允许版本降级?

我之前也碰到过和你一模一样的棘手问题——系统预装的Chrome既没法直接卸载,装旧版本又被INSTALL_FAILED_VERSION_DOWNGRADE卡死,折腾了好一阵才捋清楚可行的解决办法,结合你的操作情况,给你分享几个实操方案:

方案一:禁用系统预装Chrome,再替换安装旧版本

你之前尝试卸载Chrome时,要么提示DELETE_FAILED_INTERNAL_ERROR,要么用--user 0参数时提示not installed for 0,这是因为Chrome是系统预装应用,普通卸载命令对它无效,但我们可以先禁用它来解除包名的版本限制:

  1. 执行命令禁用系统Chrome:
    adb shell pm disable-user --user 0 com.android.chrome
    
    执行成功后,设备上的系统Chrome会被标记为禁用状态(不再显示在应用列表里),也就不会再占用com.android.chrome的活跃包名。
  2. 接着用替换参数安装旧版本APK:
    adb install -r chrome100.apk
    
    这一步因为系统Chrome已经被禁用,-r参数就能直接替换安装旧版本,不会再触发版本降级的校验。

方案二:使用系统包管理的降级安装命令(更直接)

adb自带的install -d参数只支持可调试包,但Android系统的cmd package工具提供了针对非调试包的降级安装选项,步骤如下:

  1. 先把旧版本APK推送到设备的可访问目录,比如SD卡根目录:
    adb push chrome100.apk /sdcard/
    
  2. 然后执行系统层面的降级安装命令:
    adb shell cmd package install-downgrade -r /sdcard/chrome100.apk
    
    这个命令绕过了adb-d参数的调试包限制,直接在系统层面完成降级替换,成功率很高。

方案三:Root设备后替换系统分区APK(可选)

如果你的设备已经获取Root权限,还可以直接替换系统分区里的Chrome安装文件,一劳永逸:

  1. 先把系统分区挂载为可读写状态:
    adb shell su -c "mount -o rw,remount /system"
    
    注意:部分新设备的系统分区是/product/system_ext,可以先通过adb shell pm path com.android.chrome查看Chrome的实际路径。
  2. 把旧版本APK推送到对应路径(比如Chrome的系统路径是/system/app/Chrome/):
    adb push chrome100.apk /system/app/Chrome/Chrome.apk
    
  3. 恢复系统分区为只读状态:
    adb shell su -c "mount -o ro,remount /system"
    
  4. 重启设备后,旧版本Chrome就会生效。不过这个方法有一定风险,操作前建议备份系统分区。

为什么你之前的-r -d组合没用?

你之前用adb install -r -d chrome100.apk还是失败,是因为-d参数的官方说明明确标注了仅支持可调试包(debuggable packages only),而你下载的chrome100.apk是正式发布版,没有开启调试标识,所以这个参数对你的APK完全不起作用,自然还是会触发版本降级错误。

内容来源于stack exchange

火山引擎 最新活动