ADB禁用OTA更新,徹底關(guān)閉設(shè)置小紅點(diǎn)和系統(tǒng)升級(jí)彈窗)
你有沒(méi)有遇到過(guò)這種情況設(shè)備用得好好的某天打開(kāi)設(shè)置突然發(fā)現(xiàn)“系統(tǒng)更新”旁邊多了一個(gè)刺眼的紅點(diǎn)沒(méi)過(guò)兩天OTA 更新彈窗準(zhǔn)時(shí)跳出來(lái)你點(diǎn)了“暫不”它明天再來(lái)。很多人一開(kāi)始覺(jué)得無(wú)所謂直到某次手滑點(diǎn)了“立即更新”升級(jí)完成后才發(fā)現(xiàn)系統(tǒng)變卡了、廣告變多了、原本能裝的 App 裝不了了而廠商早就關(guān)閉了降級(jí)通道。這個(gè)問(wèn)題的關(guān)鍵其實(shí)不是“你不想升級(jí)”而是“廠商把‘暫時(shí)不更新’做成了一場(chǎng)沒(méi)完沒(méi)了的騷擾”。對(duì)于電視盒子、備用手機(jī)、老人機(jī)、車機(jī)這類設(shè)備來(lái)說(shuō)OTA 更新往往不是體驗(yàn)提升反而是負(fù)優(yōu)化。與其每天跟彈窗斗智斗勇不如一次性把系統(tǒng)更新服務(wù)在本地禁用掉。這篇文章就做一件事給你一套一鍵腳本通過(guò) ADB 禁用系統(tǒng)更新組件、關(guān)閉更新通知權(quán)限從根源上消滅“設(shè)置小紅點(diǎn)”和“OTA 更新彈窗”。整個(gè)過(guò)程不需要 root、不需要刷機(jī)、不需要逐條敲命令并且提供一鍵恢復(fù)方案。文章會(huì)講清楚原理、適用場(chǎng)景、腳本實(shí)現(xiàn)、驗(yàn)證方法和常見(jiàn)坑方便你收藏后照著操作。1. 為什么越來(lái)越多人想徹底關(guān)掉 OTA 更新1.1 小紅點(diǎn)和彈窗是怎么來(lái)的絕大多數(shù)安卓設(shè)備的“設(shè)置小紅點(diǎn)”并不是設(shè)置 App 自己畫(huà)出來(lái)的而是系統(tǒng)更新服務(wù)通過(guò)通知渠道發(fā)了一條高優(yōu)先級(jí)通知桌面啟動(dòng)器檢測(cè)到未讀通知后在設(shè)置圖標(biāo)右上角疊加了一個(gè)角標(biāo)。也就是說(shuō)紅點(diǎn)只是“系統(tǒng)更新應(yīng)用還在活躍”的視覺(jué)信號(hào)。OTA 升級(jí)彈窗的邏輯也類似系統(tǒng)更新應(yīng)用會(huì)定期訪問(wèn)廠商的更新服務(wù)器一旦發(fā)現(xiàn)新版本就通過(guò)系統(tǒng)級(jí)彈窗把結(jié)果推給你。部分 ROM 甚至?xí)褟棿白龀伞懊看伍_(kāi)機(jī)/解鎖都檢查一次”的頻率。于是你點(diǎn)了“暫不”第二天它還會(huì)來(lái)。1.2 OTA 更新對(duì)部分設(shè)備就是負(fù)優(yōu)化如果這是你的主力手機(jī)我完全理解廠商推送安全補(bǔ)丁的價(jià)值。但問(wèn)題是很多設(shè)備并不適合頻繁升級(jí)舊手機(jī)新系統(tǒng)往往更吃內(nèi)存省電策略改變功能被砍升級(jí)后明顯變卡。電視盒子有些廠商會(huì)借 OTA 更新推送新的廣告桌面、限制第三方應(yīng)用安裝、甚至替換預(yù)裝軟件。老人機(jī)/學(xué)習(xí)機(jī)/專用設(shè)備穩(wěn)定性比新功能更重要一次失敗的系統(tǒng)升級(jí)可能讓設(shè)備直接變磚。車機(jī)/工控設(shè)備供應(yīng)商停止維護(hù)后一次“順手”的 OTA 更新可能引入新的不兼容問(wèn)題。更麻煩的是大部分設(shè)備升級(jí)后無(wú)法回退。即使你找得到舊版本固件廠商也可能通過(guò)簽名校驗(yàn)和防降級(jí)機(jī)制阻止刷入。所以“拒絕更新”不是矯情而是對(duì)設(shè)備控制權(quán)的堅(jiān)持。2. 核心原理ADB、pm disable-user 與通知角標(biāo)2.1 什么是 ADBADB 全稱 Android Debug Bridge是 Google 官方提供的安卓調(diào)試工具。它通過(guò) USB 或網(wǎng)絡(luò)與設(shè)備通信可以讓你在電腦上執(zhí)行設(shè)備端的 shell 命令。我們今天的腳本核心就是借助 ADB 向設(shè)備發(fā)送“禁用某個(gè)應(yīng)用”的指令。使用 ADB 不需要 root也不需要刷入第三方 Recovery只需要在設(shè)備上打開(kāi)“開(kāi)發(fā)者選項(xiàng)”里的 USB 調(diào)試。這個(gè)門(mén)檻非常低幾乎所有安卓設(shè)備都支持。2.2 pm disable-user 和 pm uninstall 的區(qū)別很多教程會(huì)告訴你“卸載系統(tǒng)更新應(yīng)用”但更穩(wěn)妥的做法是用 pm disable-user。pm disable-user --user 0 包名這個(gè)命令的意思是只對(duì)當(dāng)前用戶用戶 0停用這個(gè)應(yīng)用。它有幾個(gè)好處不需要 root系統(tǒng)應(yīng)用也能禁用。不是真正的刪除系統(tǒng)分區(qū)不受影響。隨時(shí)可以用 pm enable 包名 恢復(fù)。應(yīng)用數(shù)據(jù)還在恢復(fù)后不需要重新配置。而 pm uninstall -k --user 0 包名 雖然也可以移除系統(tǒng)應(yīng)用但效果更接近“刪除”有些 ROM 重啟后會(huì)重新安裝有些 ROM 在恢復(fù)時(shí)需要額外處理。所以本文統(tǒng)一采用 disable-user安全性和可恢復(fù)性都更好。2.3 為什么禁用更新應(yīng)用后紅點(diǎn)會(huì)消失前面說(shuō)過(guò)紅點(diǎn)本質(zhì)是更新應(yīng)用的通知。當(dāng)你用 pm disable-user 停用更新應(yīng)用后它就無(wú)法再向系統(tǒng)發(fā)送通知Launcher 自然檢測(cè)不到未讀消息設(shè)置圖標(biāo)上的紅點(diǎn)就會(huì)消失。如果個(gè)別 ROM 在禁用后仍然顯示紅點(diǎn)通常是因?yàn)椤霸O(shè)置”App 自己也訂閱了更新?tīng)顟B(tài)。這時(shí)候需要再補(bǔ)一步關(guān)閉“設(shè)置”App 的通知角標(biāo)權(quán)限或者到桌面長(zhǎng)按“設(shè)置”圖標(biāo)進(jìn)入“應(yīng)用信息 - 通知 - 角標(biāo)”手動(dòng)關(guān)閉。這部分無(wú)法在腳本里完全自動(dòng)化因?yàn)椴煌烂鎲?dòng)器的角標(biāo)控制方式不同。2.4 為什么選擇一鍵腳本手動(dòng)操作其實(shí)只有幾步adb shell pm disable-user --user 0 com.android.updater adb shell appops set com.android.updater POST_NOTIFICATION ignore但問(wèn)題在于不同品牌的更新應(yīng)用包名不一樣不同系統(tǒng)版本對(duì)通知權(quán)限的處理也不一樣。你很可能需要先查包名、再逐條執(zhí)行、最后還要驗(yàn)證效果。一個(gè)一鍵腳本可以幫你把這些動(dòng)作封裝成“雙擊運(yùn)行”和“雙擊恢復(fù)”兩個(gè)入口既降低操作門(mén)檻也避免誤刪其他系統(tǒng)組件。3. 適用場(chǎng)景與使用邊界3.1 適合這樣做的設(shè)備下面這些場(chǎng)景強(qiáng)烈建議使用本文的屏蔽方案電視盒子/投影盒子主界面廣告越來(lái)越多系統(tǒng)更新頻繁推送新桌面。備用舊手機(jī)不承擔(dān)日常通訊只用來(lái)做監(jiān)控、鬧鐘、遙控器、下載機(jī)。老人機(jī)/學(xué)習(xí)機(jī)避免誤觸升級(jí)導(dǎo)致界面變化、應(yīng)用無(wú)法使用。車機(jī)/工控屏/收銀機(jī)穩(wěn)定大于一切不允許后臺(tái)自動(dòng)下載更新包。被廠商負(fù)優(yōu)化“傷過(guò)”的設(shè)備升級(jí)后卡頓、發(fā)熱、廣告增多想回到舊版又回不去。3.2 不建議這樣做的設(shè)備主力手機(jī)尤其你在意安全補(bǔ)丁、銀行 App 兼容性、新功能體驗(yàn)的情況。在保設(shè)備雖然 disable-user 不涉及刷機(jī)但部分廠商對(duì)“系統(tǒng)組件被停用”仍可能影響售后判斷。銀行/支付/門(mén)禁類專用終端系統(tǒng)更新往往包含安全修復(fù)不能因小失大。完全不理解“恢復(fù)”是什么的小白用戶請(qǐng)務(wù)必把恢復(fù)腳本一起保存好。3.3 安全邊界本文所有操作僅限本人自持設(shè)備。執(zhí)行前建議先備份重要數(shù)據(jù)尤其是通訊錄、照片和微信記錄。雖然 disable-user 基本不會(huì)影響數(shù)據(jù)但任何系統(tǒng)級(jí)操作都應(yīng)該有“后悔藥”。不要在他人設(shè)備上執(zhí)行本腳本也不要對(duì)不了解用途的系統(tǒng)應(yīng)用隨意禁用。4. 環(huán)境準(zhǔn)備從零到能跑 ADB4.1 電腦端安裝 platform-toolsADB 是 Google 官方工具包含在 Android SDK Platform-Tools 里。你不需要安裝完整的 Android Studio只需要下載 platform-tools。下載解壓后建議把 adb 所在目錄加入系統(tǒng) PATH這樣在任何目錄下都能直接執(zhí)行 adb 命令。如果你不想配置 PATH也可以把后面腳本里的 adb 換成絕對(duì)路徑。驗(yàn)證是否安裝成功adb version正常會(huì)輸出類似Android Debug Bridge version 1.0.41 Version 33.0.3-136823624.2 手機(jī)/盒子開(kāi)啟開(kāi)發(fā)者選項(xiàng)以手機(jī)為例打開(kāi)“設(shè)置 - 關(guān)于手機(jī)”。連續(xù)點(diǎn)擊“版本號(hào)”7 次直到出現(xiàn)“您已進(jìn)入開(kāi)發(fā)者模式”提示。返回設(shè)置進(jìn)入“開(kāi)發(fā)者選項(xiàng)”。打開(kāi)“USB 調(diào)試”。電視盒子的入口不太一樣。很多盒子在“設(shè)置 - 關(guān)于”里沒(méi)有“版本號(hào)”而是直接提供“ADB 調(diào)試”開(kāi)關(guān)或者在“網(wǎng)絡(luò)設(shè)置”里提供“遠(yuǎn)程調(diào)試”模式。如果找不到可以嘗試在“設(shè)置”里搜索 “ADB” 或“調(diào)試”。4.3 連接與授權(quán)用數(shù)據(jù)線連接手機(jī)和電腦后設(shè)備上會(huì)彈出“是否允許 USB 調(diào)試”的授權(quán)窗口勾選“始終允許”并確認(rèn)。然后執(zhí)行adb devices如果輸出類似List of devices attached abcdef123456 device說(shuō)明設(shè)備已成功連接。如果顯示 offline通常是驅(qū)動(dòng)問(wèn)題或授權(quán)被拒絕如果顯示 unauthorized說(shuō)明設(shè)備上還沒(méi)點(diǎn)允許。5. 一鍵腳本下載到運(yùn)行5.1 腳本干了什么整個(gè)腳本分為兩步掃描并禁用常見(jiàn)系統(tǒng)更新包。關(guān)閉“設(shè)置”和更新應(yīng)用的通知角標(biāo)權(quán)限。腳本不會(huì)動(dòng) GMS、下載管理器、SystemUI 等關(guān)鍵組件也不會(huì)刪除任何文件。它只執(zhí)行 pm disable-user 和 appops 兩類指令所有操作都可以通過(guò)恢復(fù)腳本還原。5.2 Windows 一鍵腳本 disable_ota.bat在 Windows 上新建一個(gè)文本文件命名為 disable_ota.bat內(nèi)容如下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使用方法把手機(jī)/盒子通過(guò) ADB 連上電腦雙擊運(yùn)行 disable_ota.bat等到輸出 DONE 后重啟設(shè)備。這個(gè)腳本里有一個(gè)細(xì)節(jié)需要注意chcp 65001把命令窗口切到 UTF-8 編碼避免中文亂碼。如果你的系統(tǒng)控制臺(tái)字體不支持 UTF-8可以把腳本里的中文提示改成英文并不影響功能。5.3 macOS/Linux 一鍵腳本 disable_ota.sh如果你在 macOS 或 Linux 環(huán)境新建 disable_ota.sh內(nèi)容如下#!/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.運(yùn)行前賦予執(zhí)行權(quán)限chmod x disable_ota.sh ./disable_ota.sh5.4 一鍵恢復(fù)腳本 restore_ota.bat無(wú)論禁用后效果如何你都需要一個(gè)“后悔藥”。新建 restore_ota.bat內(nèi)容如下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恢復(fù)腳本的原理很簡(jiǎn)單把之前禁用的更新包通過(guò) pm enable 重新啟用再把通知權(quán)限恢復(fù)為 default。注意pm enable 只對(duì)“之前被 pm disable-user 停用”的應(yīng)用有效。如果你是通過(guò) adb shell pm uninstall 方式移除的需要用 pm install-existing 恢復(fù)。5.5 不使用腳本的手工方案如果你想先觀察一下到底哪些包與更新有關(guān)可以先手工執(zhí)行# 列出所有包名過(guò)濾出更新相關(guān)關(guān)鍵詞 adb shell pm list packages | grep -Ei update|ota|upgrade|sysupdater # 對(duì)篩選出的包執(zhí)行禁用 adb shell pm disable-user --user 0 包名 # 關(guān)閉通知角標(biāo)權(quán)限 adb shell appops set 包名 POST_NOTIFICATION ignore # 恢復(fù) adb shell pm enable 包名不同設(shè)備的包名差異很大。腳本里的候選列表覆蓋的是常見(jiàn)品牌如果你的設(shè)備不在列表里建議先用 grep 命令掃描再手工禁用。掃描出來(lái)的包不一定全部要禁優(yōu)先觀察名字里包含 update、ota、upgrade 且屬于系統(tǒng)預(yù)裝應(yīng)用的包。不要禁用 Google Play 服務(wù)com.google.android.gms和下載管理器com.android.providers.downloads否則會(huì)影響很多依賴功能。6. 運(yùn)行結(jié)果與效果驗(yàn)證6.1 預(yù)期輸出腳本運(yùn)行過(guò)程中你會(huì)看到類似下面的輸出[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只要出現(xiàn)至少一個(gè)[OK]就說(shuō)明成功禁用了當(dāng)前設(shè)備上的更新包。如果全是[--]說(shuō)明該設(shè)備的更新應(yīng)用不在候選列表里需要走手工掃描方案。禁用完成后重啟設(shè)備。重啟后進(jìn)入“設(shè)置”正常情況下“系統(tǒng)更新”入口可能會(huì)顯示“已停用”或直接無(wú)法進(jìn)入原來(lái)的小紅點(diǎn)消失OTA 彈窗不再出現(xiàn)。6.2 命令行驗(yàn)證重啟后可以通過(guò)命令確認(rèn)包被正確禁用# Windows 使用 findstrLinux/macOS 使用 grep adb shell pm list packages -d | findstr /i update adb shell pm list packages -d | grep -i update如果輸出中包含剛才禁用的包名說(shuō)明禁用狀態(tài)生效。6.3 驗(yàn)證清單驗(yàn)證項(xiàng)預(yù)期結(jié)果操作方式設(shè)置圖標(biāo)紅點(diǎn)消失回到桌面看圖標(biāo)OTA 彈窗不再出現(xiàn)重啟設(shè)備觀察一兩天系統(tǒng)更新入口顯示已停用或無(wú)法連接打開(kāi)設(shè)置-系統(tǒng)更新禁用狀態(tài)包名出現(xiàn)在停用列表adb shell pm list packages -d恢復(fù)正常恢復(fù)腳本執(zhí)行成功運(yùn)行 restore_ota.bat 后重啟如果紅點(diǎn)仍然存在優(yōu)先檢查兩件事一是設(shè)備上是否還有另一個(gè)跟更新相關(guān)的應(yīng)用在發(fā)通知二是桌面啟動(dòng)器的角標(biāo)設(shè)置是否獨(dú)立于通知權(quán)限。部分 ROM 的桌面角標(biāo)是啟動(dòng)器自己維護(hù)的即使沒(méi)有通知也會(huì)顯示這時(shí)候只能手動(dòng)關(guān)閉桌面角標(biāo)。7. 常見(jiàn)問(wèn)題與排查思路問(wèn)題現(xiàn)象可能原因排查方式解決方案adb devices 找不到設(shè)備未打開(kāi) USB 調(diào)試或驅(qū)動(dòng)異常重新拔插數(shù)據(jù)線檢查設(shè)備授權(quán)彈窗更換數(shù)據(jù)線/接口重裝驅(qū)動(dòng)設(shè)備顯示 offline驅(qū)動(dòng)不兼容或 adb 版本過(guò)舊adb kill-server 后重試升級(jí) platform-tools重啟 adb設(shè)備顯示 unauthorized沒(méi)有在設(shè)備上點(diǎn)“允許調(diào)試”查看手機(jī)屏幕確認(rèn)授權(quán)彈窗重新插拔并勾選允許腳本全部輸出 [--]當(dāng)前設(shè)備的更新包不在候選列表執(zhí)行 pm list packages grep 掃描手工禁用識(shí)別出的包禁用了更新包后設(shè)置閃退誤禁了與設(shè)置關(guān)聯(lián)的組件查看腳本中禁用的包名運(yùn)行恢復(fù)腳本重啟設(shè)備重啟后紅點(diǎn)又出現(xiàn)桌面角標(biāo)獨(dú)立于通知或另一個(gè)應(yīng)用在發(fā)通知長(zhǎng)按設(shè)置圖標(biāo)排查通知來(lái)源手動(dòng)關(guān)閉桌面角標(biāo)系統(tǒng)更新彈窗仍出現(xiàn)更新邏輯內(nèi)置在設(shè)置/系統(tǒng)組件中抓取日志確認(rèn)來(lái)源考慮 root 后徹底移除更新 APK恢復(fù)腳本沒(méi)有恢復(fù)成功原來(lái)是通過(guò) pm uninstall 刪除的檢查 pm list packages 是否還包含該包使用 pm install-existing 恢復(fù)這里特別強(qiáng)調(diào)一個(gè)容易踩的坑不要為了“更徹底”順手禁用 com.google.android.gms。這個(gè)包是 Google Play 服務(wù)很多應(yīng)用依賴它禁掉之后會(huì)導(dǎo)致大量應(yīng)用報(bào)錯(cuò)、后臺(tái)同步異常。另外系統(tǒng)下載管理器 com.android.providers.downloads 也不要禁它會(huì)影響到包括 OTA 包下載在內(nèi)的大部分下載功能。8. 最佳實(shí)踐與工程建議8.1 安全優(yōu)先的幾條原則優(yōu)先 disable-user不要輕易 uninstall。前者的恢復(fù)粒度更細(xì)風(fēng)險(xiǎn)更小。禁用前先導(dǎo)出當(dāng)前包列表。執(zhí)行adb shell pm list packages packages_before.txt一旦出現(xiàn)問(wèn)題可以對(duì)照排查。一次只禁一個(gè)包重啟驗(yàn)證再禁下一個(gè)。如果一次禁太多出現(xiàn)問(wèn)題時(shí)很難定位。不要碰不理解的系統(tǒng)組件。腳本里的候選列表已經(jīng)很克制手工操作時(shí)請(qǐng)保持同樣的克制?;謴?fù)腳本和禁用腳本放在同一個(gè)文件夾里標(biāo)注設(shè)備型號(hào)和日期方便以后再次使用。8.2 root 后的更徹底方案如果你愿意承擔(dān) root 帶來(lái)的風(fēng)險(xiǎn)和保修影響可以考慮把更新應(yīng)用從系統(tǒng)分區(qū)直接移走。這個(gè)操作的原理是讓系統(tǒng)啟動(dòng)時(shí)根本找不到更新組件比 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需要注意不同設(shè)備/系統(tǒng)版本的掛載路徑不同很多新設(shè)備是 /system_root有些還需要先解鎖 bootloader。這個(gè)操作比 ADB 禁用危險(xiǎn)得多一旦誤刪關(guān)鍵組件可能導(dǎo)致開(kāi)機(jī)卡 LOGO。不建議新手直接嘗試。如果你沒(méi)有把握用 disable-user 已經(jīng)完全夠用。8.3 路由器/DNS 層屏蔽 OTA 域名禁用更新應(yīng)用后設(shè)備不會(huì)主動(dòng)請(qǐng)求更新服務(wù)器但如果你希望更徹底可以在路由器層面把更新域名屏蔽掉。具體方法是抓包看設(shè)備啟動(dòng)后訪問(wèn)了哪些域名然后在路由器的域名過(guò)濾/自定義 hosts 里屏蔽這些域名。這個(gè)方案適合電視盒子這種固定網(wǎng)絡(luò)環(huán)境。需要注意不要盲目屏蔽整個(gè)廠商域名否則可能連應(yīng)用商店、語(yǔ)音搜索等正常功能也一起失效。更穩(wěn)妥的方法是先禁用更新應(yīng)用再觀察設(shè)備是否還會(huì)訪問(wèn)更新服務(wù)器確認(rèn)域名后再做路由器層屏蔽。8.4 腳本的長(zhǎng)期維護(hù)廠商的系統(tǒng)更新包名不是固定不變的。一次升級(jí)、一次恢復(fù)出廠設(shè)置都可能讓更新包重新出現(xiàn)或者讓包名發(fā)生變化。建議每隔一段時(shí)間重新執(zhí)行一次禁用腳本并用pm list packages -d確認(rèn)狀態(tài)。另外如果你在處理多臺(tái)設(shè)備建議每臺(tái)設(shè)備都保留一份獨(dú)立的腳本記錄。因?yàn)椴煌蔚碾娨暫凶酉到y(tǒng)版本和包名可能完全不同。記錄下當(dāng)前設(shè)備成功禁用了哪些包等于給自己留了一份“已知可用配置”。9. 總結(jié)這篇文章從“設(shè)置小紅點(diǎn)”和“OTA 更新彈窗”的騷擾場(chǎng)景出發(fā)講清楚了它們產(chǎn)生的機(jī)制系統(tǒng)更新應(yīng)用發(fā)送通知桌面啟動(dòng)器展示角標(biāo)更新服務(wù)定期檢查并彈窗。然后給出了一個(gè)不需要 root、不需要刷機(jī)的解法通過(guò) ADB 執(zhí)行 pm disable-user 禁用更新應(yīng)用再用 appops 關(guān)閉通知角標(biāo)權(quán)限最終用一鍵腳本封裝整個(gè)過(guò)程。腳本不是萬(wàn)能的因?yàn)椴煌放频母掳町惡艽?。如果你的設(shè)備不在腳本候選列表里文章中已經(jīng)給出手工掃描和禁用方案。整件事最核心的原則是可恢復(fù)、可排查、不誤傷。每次操作前想清楚“如果出問(wèn)題我能不能恢復(fù)”是比“能不能成功”更重要的問(wèn)題。建議你先在自己手頭最不重要的設(shè)備上跑一次腳本驗(yàn)證紅點(diǎn)和彈窗是否消失熟悉恢復(fù)流程后再?zèng)Q定要不要在主力設(shè)備上使用。把 disable_ota.bat 和 restore_ota.bat 放在同一個(gè)目錄保存好下次遇到一臺(tái)被 OTA 彈窗騷擾的設(shè)備你五分鐘就能搞定。