蒙 6 关闭系统更新暂时办法
鸿蒙 6 关闭系统更新暂时办法
起因
畅享90前阵子从鸿蒙7降级鸿蒙6.1,手动在系统更新里的更新选项全部关闭了。开始还可以,慢慢的每天开屏的时候不一定什么时候就弹系统更新提示窗。奇葩的是出在提示窗显示的时候,什么下拉上滑都无法使用,他的权力最大。为了解决这个问题开了usb调试连计算机想办法处理了一下。
在老HarmonyOS(基于安卓那几代)上这个问题很好处理,adb 连上,一行命令搞定:
adb shell pm disable-user com.huawei.android.hwouc
hwouc 就是华为系统更新的包名,disable 之后设置里那个"软件更新"直接灰掉,世界清净。
结果第一步就卡住了。
adb 连不上了
> adb devices -l
List of devices attached
空的。设备管理器里驱动一切正常,USB 调试也开着,但 adb 死活认不出这台手机。
折腾了十几分钟我才反应过来:鸿蒙 6 是纯血鸿蒙,内核都换成鸿蒙自己的了,压根不暴露 adb 协议。这已经不是"安卓换皮",是换了个底子。adb 那套东西,包括 pm、settings、am,全都成历史了。
取而代之的是华为自己的调试桥:hdc(HarmonyOS Device Connector)。
hdc 在哪
我这台电脑之前装过 DevEco Studio,hdc 就藏在 SDK 的 toolchains 目录里:
C:\Program Files\Huawei\DevEco Studio\sdk\default\openharmony\toolchains\hdc.exe
注意这个路径不在 PATH 里,得用完整路径调,嫌麻烦可以自己加一下环境变量。
> hdc version
Ver: 3.2.0c
> hdc list targets
6UNBB26319056***
设备认出来了。进 shell 看一眼:
> hdc shell "id && uname -a"
uid=2000(shell) gid=2000(shell) groups=2000(shell),...
HarmonyOS localhost HongMeng Kernel 1.12.0 #1 SMP ... aarch64 Toybox
HongMeng Kernel,看到这行的时候有点感慨,以前 uname 出来的都是 Linux。不过先别激动,shell 的权限比想象中紧得多:
ls /→Permission denied- 读系统版本参数 →
fail! errNum is:106!
连根目录都不让看,这跟安卓时代 shell 想看哪看哪完全不是一个待遇。当时我隐约觉得后面不会太顺利,但还是想试试。
找到新版的系统更新包名
安卓的 pm dump 没了,鸿蒙对应的是 bm(Bundle Manager)。列出全部包名:
> hdc shell "bm dump -a"
吐出来两百多个包,在里面翻到了这个:
com.huawei.hmos.ouc
ouc,跟老包名 hwouc 对得上,就是它了。用 bm dump -n com.huawei.hmos.ouc 看详情,appDistributionType 是 os_integration,系统集成的预置应用。
尝试 disable:三连败
第一招,bm disable:
> hdc shell "bm disable -n com.huawei.hmos.ouc"
bm: 'disable' is not a valid bm command. See 'bm help'.
直接被删了。翻了一遍 bm help,命令列表里干干净净,只剩 install、uninstall、dump、clean 这几个,disable/enable 压根不存在。这是跟老鸿蒙最本质的区别——不是权限不够,是工具层面就没给你这条路。
第二招,卸载:
> hdc shell "bm uninstall -n com.huawei.hmos.ouc -u 0"
error: failed to uninstall bundle.
code:304
error: user does not install the hap.
预置应用,拒了。
第三招,改系统参数。 这是我在 param get 里翻到的一线希望,设备上有一整套更新引擎的参数:
persist.dupdate_engine.hota_polling_period = 7 # 7天轮询一次
persist.dupdate_engine.idle_check_interval = 180
persist.update.hmos_new_version_check_info = checkTime:...;hasNewVersion:true
hota_polling_period = 7,每 7 天轮询一次,那我把它改成 99999 不就完事了?:
> hdc shell "param set persist.dupdate_engine.hota_polling_period 99999"
Set parameter ... fail! errNum is:1001!
1001,权限拒绝。persist.* 前缀的参数全被参数权限标签保护着,shell 域一个都写不进。
不死心,又发现一组 ota.system_update.* 参数,这个居然能写:
> hdc shell "param set ota.system_update.autoUpgrade 1"
Set parameter ota.system_update.autoUpgrade 1 success
成功的一瞬间我还在想是不是有戏,马上意识到不对——这参数前缀没有 persist,是运行时参数,重启就还原。而且这会儿我手一抖把它设成 1 了,赶紧改回 0,顺便把连带的 connectPolicy 也恢复了原值,虚惊一场。
后来想了想,就算能用,重启失效的开关也没啥实际意义,总不能每次开机先连电脑改一遍参数。
那 shell 还能干点啥
能做的就剩这两下了:
# 强制停止更新程序(立即生效,进程干干净净)
> hdc shell "aa force-stop com.huawei.hmos.ouc"
force stop process successfully.
# 清掉它的数据(缓存的检测记录、已下载的更新包一起没)
> hdc shell "bm clean -n com.huawei.hmos.ouc -d"
clean bundle data files successfully.
执行完 ps -ef 里确实找不到 ouc 的进程了。但说实话,这两招都是缓兵之计:系统要检测更新的时候会把它再拉起来,bm clean 清掉的数据过几天也会重新生成。
我还试着找更新引擎的服务进程想用 service_control stop 停掉,结果 ps -ef 里压根没有常驻的更新进程——dupdate_engine 是按需启动的 SA,不用的时候根本不在,想堵都堵不住。
最后的结果
折腾一圈下来,结论是:无 root 的情况下,鸿蒙 6 没有任何持久关闭系统更新的 shell 手段。原因是三层的:bm 工具砍掉了 disable,SELinux 策略把 shell 卡得很死,persist 参数有独立的权限标签,shell 域写不进。
老鸿蒙时代 pm disable com.huawei.android.hwouc 一招走天下的日子,到鸿蒙 6 就彻底结束了。华为把门关得很严,普通人能做的就只剩设置里那几个开关了。
*实测环境:畅享90(CHZ-AL00),鸿蒙 6.1.0.135(SP9C00E127R2P4),hdc 3.2.0c,Windows 10。文中所有报错均为设备实际返回,非手打。
更多推荐



所有评论(0)