ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

一键脚本通过ADB禁用OTA更新,彻底关闭设置小红点和系统升级弹窗

一键脚本通过ADB禁用OTA更新,彻底关闭设置小红点和系统升级弹窗 你有没有遇到过这种情况设备用得好好的某天打开设置突然发现“系统更新”旁边多了一个刺眼的红点没过两天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 什么是 ADBADB 全称 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. 环境准备从零到能跑 ADB4.1 电脑端安装 platform-toolsADB 是 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-136823624.2 手机/盒子开启开发者选项以手机为例打开“设置 - 关于手机”。连续点击“版本号”7 次直到出现“您已进入开发者模式”提示。返回设置进入“开发者选项”。打开“USB 调试”。电视盒子的入口不太一样。很多盒子在“设置 - 关于”里没有“版本号”而是直接提供“ADB 调试”开关或者在“网络设置”里提供“远程调试”模式。如果找不到可以尝试在“设置”里搜索 “ADB” 或“调试”。4.3 连接与授权用数据线连接手机和电脑后设备上会弹出“是否允许 USB 调试”的授权窗口勾选“始终允许”并确认。然后执行adb devices如果输出类似List of devices attached abcdef123456 device说明设备已成功连接。如果显示 offline通常是驱动问题或授权被拒绝如果显示 unauthorized说明设备上还没点允许。5. 一键脚本下载到运行5.1 脚本干了什么整个脚本分为两步扫描并禁用常见系统更新包。关闭“设置”和更新应用的通知角标权限。脚本不会动 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 2nul 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 2nul 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 CANDIDATEScom.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 2nul for %%p in (%CANDIDATES%) do ( adb shell appops set %%p POST_NOTIFICATION ignore nul 2nul ) 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 2nul 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 21; 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 21; 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 CANDIDATEScom.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 21; 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 21 || true for pkg in $CANDIDATES; do adb shell appops set $pkg POST_NOTIFICATION ignore /dev/null 21 || 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.sh5.4 一键恢复脚本 restore_ota.bat无论禁用后效果如何你都需要一个“后悔药”。新建 restore_ota.bat内容如下echo off chcp 65001 nul setlocal enabledelayedexpansion set CANDIDATEScom.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 2nul for %%p in (%CANDIDATES%) do ( adb shell appops set %%p POST_NOTIFICATION default nul 2nul ) echo [DONE] System update service restored. pause exit /b 0 :try_enable adb shell pm enable %1 nul 2nul 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 使用 findstrLinux/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 安全优先的几条原则优先 disable-user不要轻易 uninstall。前者的恢复粒度更细风险更小。禁用前先导出当前包列表。执行adb shell pm list packages packages_before.txt一旦出现问题可以对照排查。一次只禁一个包重启验证再禁下一个。如果一次禁太多出现问题时很难定位。不要碰不理解的系统组件。脚本里的候选列表已经很克制手工操作时请保持同样的克制。恢复脚本和禁用脚本放在同一个文件夹里标注设备型号和日期方便以后再次使用。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 弹窗骚扰的设备你五分钟就能搞定。
返回列表