一键脚本通过ADB禁用OTA更新,彻底关闭设置小红点和系统升级弹窗
2026/8/31 19:26:04 网站建设 项目流程

你有没有遇到过这种情况:设备用得好好的,某天打开设置,突然发现“系统更新”旁边多了一个刺眼的红点;没过两天,OTA 更新弹窗准时跳出来,你点了“暂不”,它明天再来。很多人一开始觉得无所谓,直到某次手滑点了“立即更新”,升级完成后才发现:系统变卡了、广告变多了、原本能装的 App 装不了了,而厂商早就关闭了降级通道。

这个问题的关键,其实不是“你不想升级”,而是“厂商把‘暂时不更新’做成了一场没完没了的骚扰”。对于电视盒子、备用手机、老人机、车机这类设备来说,OTA 更新往往不是体验提升,反而是负优化。与其每天跟弹窗斗智斗勇,不如一次性把系统更新服务在本地禁用掉。

这篇文章就做一件事:给你一套一键脚本,通过 ADB 禁用系统更新组件、关闭更新通知权限,从根源上消灭“设置小红点”和“OTA 更新弹窗”。整个过程不需要 root、不需要刷机、不需要逐条敲命令,并且提供一键恢复方案。文章会讲清楚原理、适用场景、脚本实现、验证方法和常见坑,方便你收藏后照着操作。

1. 为什么越来越多人想彻底关掉 OTA 更新

1.1 小红点和弹窗是怎么来的

绝大多数安卓设备的“设置小红点”,并不是设置 App 自己画出来的,而是系统更新服务通过通知渠道发了一条高优先级通知,桌面启动器检测到未读通知后,在设置图标右上角叠加了一个角标。也就是说,红点只是“系统更新应用还在活跃”的视觉信号。

OTA 升级弹窗的逻辑也类似:系统更新应用会定期访问厂商的更新服务器,一旦发现新版本,就通过系统级弹窗把结果推给你。部分 ROM 甚至会把弹窗做成“每次开机/解锁都检查一次”的频率。于是你点了“暂不”,第二天它还会来。

1.2 OTA 更新对部分设备就是负优化

如果这是你的主力手机,我完全理解厂商推送安全补丁的价值。但问题是,很多设备并不适合频繁升级:

  • 旧手机:新系统往往更吃内存,省电策略改变,功能被砍,升级后明显变卡。
  • 电视盒子:有些厂商会借 OTA 更新推送新的广告桌面、限制第三方应用安装、甚至替换预装软件。
  • 老人机/学习机/专用设备:稳定性比新功能更重要,一次失败的系统升级可能让设备直接变砖。
  • 车机/工控设备:供应商停止维护后,一次“顺手”的 OTA 更新可能引入新的不兼容问题。

更麻烦的是,大部分设备升级后无法回退。即使你找得到旧版本固件,厂商也可能通过签名校验和防降级机制阻止刷入。所以,“拒绝更新”不是矫情,而是对设备控制权的坚持。

2. 核心原理:ADB、pm disable-user 与通知角标

2.1 什么是 ADB

ADB 全称 Android Debug Bridge,是 Google 官方提供的安卓调试工具。它通过 USB 或网络与设备通信,可以让你在电脑上执行设备端的 shell 命令。我们今天的脚本,核心就是借助 ADB 向设备发送“禁用某个应用”的指令。

使用 ADB 不需要 root,也不需要刷入第三方 Recovery,只需要在设备上打开“开发者选项”里的 USB 调试。这个门槛非常低,几乎所有安卓设备都支持。

2.2 pm disable-user 和 pm uninstall 的区别

很多教程会告诉你“卸载系统更新应用”,但更稳妥的做法是用 pm disable-user。

pm disable-user --user 0 <包名>

这个命令的意思是:只对当前用户(用户 0)停用这个应用。它有几个好处:

  • 不需要 root,系统应用也能禁用。
  • 不是真正的删除,系统分区不受影响。
  • 随时可以用 pm enable <包名> 恢复。
  • 应用数据还在,恢复后不需要重新配置。

而 pm uninstall -k --user 0 <包名> 虽然也可以移除系统应用,但效果更接近“删除”,有些 ROM 重启后会重新安装,有些 ROM 在恢复时需要额外处理。所以本文统一采用 disable-user,安全性和可恢复性都更好。

2.3 为什么禁用更新应用后,红点会消失

前面说过,红点本质是更新应用的通知。当你用 pm disable-user 停用更新应用后,它就无法再向系统发送通知,Launcher 自然检测不到未读消息,设置图标上的红点就会消失。

如果个别 ROM 在禁用后仍然显示红点,通常是因为“设置”App 自己也订阅了更新状态。这时候需要再补一步:关闭“设置”App 的通知角标权限,或者到桌面长按“设置”图标,进入“应用信息 - 通知 - 角标”,手动关闭。这部分无法在脚本里完全自动化,因为不同桌面启动器的角标控制方式不同。

2.4 为什么选择一键脚本

手动操作其实只有几步:

adb shell pm disable-user --user 0 com.android.updater adb shell appops set com.android.updater POST_NOTIFICATION ignore

但问题在于:不同品牌的更新应用包名不一样,不同系统版本对通知权限的处理也不一样。你很可能需要先查包名、再逐条执行、最后还要验证效果。一个一键脚本可以帮你把这些动作封装成“双击运行”和“双击恢复”两个入口,既降低操作门槛,也避免误删其他系统组件。

3. 适用场景与使用边界

3.1 适合这样做的设备

下面这些场景,强烈建议使用本文的屏蔽方案:

  • 电视盒子/投影盒子:主界面广告越来越多,系统更新频繁推送新桌面。
  • 备用旧手机:不承担日常通讯,只用来做监控、闹钟、遥控器、下载机。
  • 老人机/学习机:避免误触升级导致界面变化、应用无法使用。
  • 车机/工控屏/收银机:稳定大于一切,不允许后台自动下载更新包。
  • 被厂商负优化“伤过”的设备:升级后卡顿、发热、广告增多,想回到旧版又回不去。

3.2 不建议这样做的设备

  • 主力手机:尤其你在意安全补丁、银行 App 兼容性、新功能体验的情况。
  • 在保设备:虽然 disable-user 不涉及刷机,但部分厂商对“系统组件被停用”仍可能影响售后判断。
  • 银行/支付/门禁类专用终端:系统更新往往包含安全修复,不能因小失大。
  • 完全不理解“恢复”是什么的小白用户:请务必把恢复脚本一起保存好。

3.3 安全边界

本文所有操作仅限本人自持设备。执行前建议先备份重要数据,尤其是通讯录、照片和微信记录。虽然 disable-user 基本不会影响数据,但任何系统级操作都应该有“后悔药”。不要在他人设备上执行本脚本,也不要对不了解用途的系统应用随意禁用。

4. 环境准备:从零到能跑 ADB

4.1 电脑端安装 platform-tools

ADB 是 Google 官方工具,包含在 Android SDK Platform-Tools 里。你不需要安装完整的 Android Studio,只需要下载 platform-tools。

下载解压后,建议把 adb 所在目录加入系统 PATH,这样在任何目录下都能直接执行 adb 命令。如果你不想配置 PATH,也可以把后面脚本里的 adb 换成绝对路径。

验证是否安装成功:

adb version

正常会输出类似:

Android Debug Bridge version 1.0.41 Version 33.0.3-13682362

4.2 手机/盒子开启开发者选项

以手机为例:

  1. 打开“设置 - 关于手机”。
  2. 连续点击“版本号”7 次,直到出现“您已进入开发者模式”提示。
  3. 返回设置,进入“开发者选项”。
  4. 打开“USB 调试”。

电视盒子的入口不太一样。很多盒子在“设置 - 关于”里没有“版本号”,而是直接提供“ADB 调试”开关,或者在“网络设置”里提供“远程调试”模式。如果找不到,可以尝试在“设置”里搜索 “ADB” 或“调试”。

4.3 连接与授权

用数据线连接手机和电脑后,设备上会弹出“是否允许 USB 调试”的授权窗口,勾选“始终允许”并确认。

然后执行:

adb devices

如果输出类似:

List of devices attached abcdef123456 device

说明设备已成功连接。如果显示 offline,通常是驱动问题或授权被拒绝;如果显示 unauthorized,说明设备上还没点允许。

5. 一键脚本:下载到运行

5.1 脚本干了什么

整个脚本分为两步:

  1. 扫描并禁用常见系统更新包。
  2. 关闭“设置”和更新应用的通知角标权限。

脚本不会动 GMS、下载管理器、SystemUI 等关键组件,也不会删除任何文件。它只执行 pm disable-user 和 appops 两类指令,所有操作都可以通过恢复脚本还原。

5.2 Windows 一键脚本 disable_ota.bat

在 Windows 上,新建一个文本文件,命名为 disable_ota.bat,内容如下:

@echo off chcp 65001 >nul setlocal enabledelayedexpansion echo ============================================== echo OTA Update And Settings Badge Cleaner echo For personal devices only echo ============================================== echo. REM ---------- 1. check adb ---------- where adb >nul 2>nul if errorlevel 1 ( echo [ERROR] adb not found in PATH. echo Please install platform-tools first. echo Download: https://developer.android.com/tools/releases/platform-tools pause exit /b 1 ) REM ---------- 2. check device ---------- echo [INFO] Waiting for ADB device ... adb wait-for-device adb shell echo ok >nul 2>nul if errorlevel 1 ( echo [ERROR] Cannot connect to device. echo Please enable USB debugging and authorize this computer. pause exit /b 1 ) REM ---------- 3. show device info ---------- set MFG= for /f "delims=" %%a in ('adb shell getprop ro.product.manufacturer') do set MFG=%%a set MODEL= for /f "delims=" %%a in ('adb shell getprop ro.product.model') do set MODEL=%%a echo [INFO] Device : !MFG! !MODEL! echo. REM ---------- 4. disable known OTA packages ---------- set CANDIDATES=com.android.updater com.android.ota com.oplus.sau com.coloros.sau com.vivo.smartupdate com.huawei.android.hwouc com.wssyncmldm echo [STEP 1/2] Disabling known OTA packages ... for %%p in (%CANDIDATES%) do ( call :try_disable %%p ) echo. REM ---------- 5. turn off notification badge ---------- echo [STEP 2/2] Disabling notification badge ... adb shell appops set com.android.settings POST_NOTIFICATION ignore >nul 2>nul for %%p in (%CANDIDATES%) do ( adb shell appops set %%p POST_NOTIFICATION ignore >nul 2>nul ) echo [INFO] Notification badge disabled. echo. echo [DONE] Please restart your device and check Settings icon. echo [UNDO] Run restore_ota.bat to re-enable update service. pause exit /b 0 :try_disable adb shell pm disable-user --user 0 %1 >nul 2>nul if not errorlevel 1 ( echo [OK] %1 disabled ) else ( echo [--] %1 not present or failed ) exit /b 0

使用方法:把手机/盒子通过 ADB 连上电脑,双击运行 disable_ota.bat,等到输出 DONE 后重启设备。

这个脚本里有一个细节需要注意:chcp 65001把命令窗口切到 UTF-8 编码,避免中文乱码。如果你的系统控制台字体不支持 UTF-8,可以把脚本里的中文提示改成英文,并不影响功能。

5.3 macOS/Linux 一键脚本 disable_ota.sh

如果你在 macOS 或 Linux 环境,新建 disable_ota.sh,内容如下:

#!/usr/bin/env bash echo "==============================================" echo " OTA Update And Settings Badge Cleaner" echo " For personal devices only" echo "==============================================" echo # 1. check adb if ! command -v adb >/dev/null 2>&1; then echo "[ERROR] adb not found. Install platform-tools first." exit 1 fi # 2. wait device adb wait-for-device if ! adb shell echo ok >/dev/null 2>&1; then echo "[ERROR] Cannot connect to device." exit 1 fi MFG=$(adb shell getprop ro.product.manufacturer | tr -d '\r') MODEL=$(adb shell getprop ro.product.model | tr -d '\r') echo "[INFO] Device : ${MFG} ${MODEL}" echo CANDIDATES="com.android.updater com.android.ota com.oplus.sau com.coloros.sau com.vivo.smartupdate com.huawei.android.hwouc com.wssyncmldm" echo "[STEP 1/2] Disabling known OTA packages..." for pkg in $CANDIDATES; do if adb shell pm disable-user --user 0 "$pkg" >/dev/null 2>&1; then echo " [OK] $pkg disabled" else echo " [--] $pkg not present or failed" fi done echo echo "[STEP 2/2] Disabling notification badge..." adb shell appops set com.android.settings POST_NOTIFICATION ignore >/dev/null 2>&1 || true for pkg in $CANDIDATES; do adb shell appops set "$pkg" POST_NOTIFICATION ignore >/dev/null 2>&1 || true done echo echo "[DONE] Restart your device and check Settings icon." echo "[UNDO] Run restore_ota.sh to re-enable update service."

运行前赋予执行权限:

chmod +x disable_ota.sh ./disable_ota.sh

5.4 一键恢复脚本 restore_ota.bat

无论禁用后效果如何,你都需要一个“后悔药”。新建 restore_ota.bat,内容如下:

@echo off chcp 65001 >nul setlocal enabledelayedexpansion set CANDIDATES=com.android.updater com.android.ota com.oplus.sau com.coloros.sau com.vivo.smartupdate com.huawei.android.hwouc com.wssyncmldm echo [INFO] Re-enabling OTA packages ... for %%p in (%CANDIDATES%) do ( call :try_enable %%p ) echo [INFO] Restoring notification badge ... adb shell appops set com.android.settings POST_NOTIFICATION default >nul 2>nul for %%p in (%CANDIDATES%) do ( adb shell appops set %%p POST_NOTIFICATION default >nul 2>nul ) echo [DONE] System update service restored. pause exit /b 0 :try_enable adb shell pm enable %1 >nul 2>nul if not errorlevel 1 ( echo [OK] %1 enabled ) else ( echo [--] %1 not present or not enabled ) exit /b 0

恢复脚本的原理很简单:把之前禁用的更新包通过 pm enable 重新启用,再把通知权限恢复为 default。注意,pm enable 只对“之前被 pm disable-user 停用”的应用有效。如果你是通过 adb shell pm uninstall 方式移除的,需要用 pm install-existing 恢复。

5.5 不使用脚本的手工方案

如果你想先观察一下到底哪些包与更新有关,可以先手工执行:

# 列出所有包名,过滤出更新相关关键词 adb shell pm list packages | grep -Ei 'update|ota|upgrade|sysupdater' # 对筛选出的包执行禁用 adb shell pm disable-user --user 0 <包名> # 关闭通知角标权限 adb shell appops set <包名> POST_NOTIFICATION ignore # 恢复 adb shell pm enable <包名>

不同设备的包名差异很大。脚本里的候选列表覆盖的是常见品牌,如果你的设备不在列表里,建议先用 grep 命令扫描,再手工禁用。扫描出来的包不一定全部要禁,优先观察名字里包含 update、ota、upgrade 且属于系统预装应用的包。不要禁用 Google Play 服务(com.google.android.gms)和下载管理器(com.android.providers.downloads),否则会影响很多依赖功能。

6. 运行结果与效果验证

6.1 预期输出

脚本运行过程中,你会看到类似下面的输出:

[INFO] Device : Xiaomi MIBOX4 [STEP 1/2] Disabling known OTA packages ... [OK] com.android.updater disabled [--] com.android.ota not present or failed [--] com.oplus.sau not present or failed

只要出现至少一个[OK],就说明成功禁用了当前设备上的更新包。如果全是[--],说明该设备的更新应用不在候选列表里,需要走手工扫描方案。

禁用完成后重启设备。重启后进入“设置”,正常情况下“系统更新”入口可能会显示“已停用”或直接无法进入,原来的小红点消失,OTA 弹窗不再出现。

6.2 命令行验证

重启后,可以通过命令确认包被正确禁用:

# Windows 使用 findstr,Linux/macOS 使用 grep adb shell pm list packages -d | findstr /i "update" adb shell pm list packages -d | grep -i update

如果输出中包含刚才禁用的包名,说明禁用状态生效。

6.3 验证清单

验证项预期结果操作方式
设置图标红点消失回到桌面看图标
OTA 弹窗不再出现重启设备观察一两天
系统更新入口显示已停用或无法连接打开设置-系统更新
禁用状态包名出现在停用列表adb shell pm list packages -d
恢复正常恢复脚本执行成功运行 restore_ota.bat 后重启

如果红点仍然存在,优先检查两件事:一是设备上是否还有另一个跟更新相关的应用在发通知,二是桌面启动器的角标设置是否独立于通知权限。部分 ROM 的桌面角标是启动器自己维护的,即使没有通知也会显示,这时候只能手动关闭桌面角标。

7. 常见问题与排查思路

问题现象可能原因排查方式解决方案
adb devices 找不到设备未打开 USB 调试或驱动异常重新拔插数据线,检查设备授权弹窗更换数据线/接口,重装驱动
设备显示 offline驱动不兼容或 adb 版本过旧adb kill-server 后重试升级 platform-tools,重启 adb
设备显示 unauthorized没有在设备上点“允许调试”查看手机屏幕确认授权弹窗重新插拔并勾选允许
脚本全部输出 [--]当前设备的更新包不在候选列表执行 pm list packages grep 扫描手工禁用识别出的包
禁用了更新包后设置闪退误禁了与设置关联的组件查看脚本中禁用的包名运行恢复脚本,重启设备
重启后红点又出现桌面角标独立于通知,或另一个应用在发通知长按设置图标排查通知来源手动关闭桌面角标
系统更新弹窗仍出现更新逻辑内置在设置/系统组件中抓取日志确认来源考虑 root 后彻底移除更新 APK
恢复脚本没有恢复成功原来是通过 pm uninstall 删除的检查 pm list packages 是否还包含该包使用 pm install-existing 恢复

这里特别强调一个容易踩的坑:不要为了“更彻底”顺手禁用 com.google.android.gms。这个包是 Google Play 服务,很多应用依赖它,禁掉之后会导致大量应用报错、后台同步异常。另外,系统下载管理器 com.android.providers.downloads 也不要禁,它会影响到包括 OTA 包下载在内的大部分下载功能。

8. 最佳实践与工程建议

8.1 安全优先的几条原则

  1. 优先 disable-user,不要轻易 uninstall。前者的恢复粒度更细,风险更小。
  2. 禁用前先导出当前包列表。执行adb shell pm list packages > packages_before.txt,一旦出现问题可以对照排查。
  3. 一次只禁一个包,重启验证,再禁下一个。如果一次禁太多,出现问题时很难定位。
  4. 不要碰不理解的系统组件。脚本里的候选列表已经很克制,手工操作时请保持同样的克制。
  5. 恢复脚本和禁用脚本放在同一个文件夹里,标注设备型号和日期,方便以后再次使用。

8.2 root 后的更彻底方案

如果你愿意承担 root 带来的风险和保修影响,可以考虑把更新应用从系统分区直接移走。这个操作的原理是让系统启动时根本找不到更新组件,比 pm disable-user 更彻底。

adb root adb shell mount -o rw,remount /system adb shell mv /system/priv-app/Updater/Updater.apk /system/priv-app/Updater/Updater.apk.bak

需要注意:不同设备/系统版本的挂载路径不同,很多新设备是 /system_root,有些还需要先解锁 bootloader。这个操作比 ADB 禁用危险得多,一旦误删关键组件可能导致开机卡 LOGO。不建议新手直接尝试。如果你没有把握,用 disable-user 已经完全够用。

8.3 路由器/DNS 层屏蔽 OTA 域名

禁用更新应用后,设备不会主动请求更新服务器,但如果你希望更彻底,可以在路由器层面把更新域名屏蔽掉。具体方法是抓包看设备启动后访问了哪些域名,然后在路由器的域名过滤/自定义 hosts 里屏蔽这些域名。

这个方案适合电视盒子这种固定网络环境。需要注意,不要盲目屏蔽整个厂商域名,否则可能连应用商店、语音搜索等正常功能也一起失效。更稳妥的方法是先禁用更新应用,再观察设备是否还会访问更新服务器,确认域名后再做路由器层屏蔽。

8.4 脚本的长期维护

厂商的系统更新包名不是固定不变的。一次升级、一次恢复出厂设置,都可能让更新包重新出现,或者让包名发生变化。建议每隔一段时间重新执行一次禁用脚本,并用pm list packages -d确认状态。

另外,如果你在处理多台设备,建议每台设备都保留一份独立的脚本记录。因为不同批次的电视盒子,系统版本和包名可能完全不同。记录下当前设备成功禁用了哪些包,等于给自己留了一份“已知可用配置”。

9. 总结

这篇文章从“设置小红点”和“OTA 更新弹窗”的骚扰场景出发,讲清楚了它们产生的机制:系统更新应用发送通知,桌面启动器展示角标,更新服务定期检查并弹窗。然后给出了一个不需要 root、不需要刷机的解法:通过 ADB 执行 pm disable-user 禁用更新应用,再用 appops 关闭通知角标权限,最终用一键脚本封装整个过程。

脚本不是万能的,因为不同品牌的更新包名差异很大。如果你的设备不在脚本候选列表里,文章中已经给出手工扫描和禁用方案。整件事最核心的原则是:可恢复、可排查、不误伤。每次操作前想清楚“如果出问题,我能不能恢复”,是比“能不能成功”更重要的问题。

建议你先在自己手头最不重要的设备上跑一次脚本,验证红点和弹窗是否消失,熟悉恢复流程后,再决定要不要在主力设备上使用。把 disable_ota.bat 和 restore_ota.bat 放在同一个目录保存好,下次遇到一台被 OTA 弹窗骚扰的设备,你五分钟就能搞定。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询