ARTICLE DETAIL

资讯详情

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

免Root用ADB卸载预装应用:原理、命令与避坑指南

免Root用ADB卸载预装应用:原理、命令与避坑指南 年初换手机的时候我干的第一件事不是贴膜而是清预装应用。系统自带的视频平台、游戏中心、钱包、换皮浏览器看着碍眼也就算了关键是通知栏天天被它们轰炸。进设置一看卸载按钮是灰的只能“停用”或者“强制停止”。想过解锁Root彻底删干净但一想到保修、银行App风控、以后每次系统升级都要重新折腾就又犹豫了。就在这个两难的位置上ADB工具给了我第三条路不需要Root、不需要解Bootloader只要电脑上装一个Google官方的开发工具、手机上打开USB调试就能把这些用不上的自带应用挨个请走。这篇就记录一下我从装环境、找包名到批量卸载、误删恢复的完整过程也把过程中踩过的坑一并列出来给想动手又不敢下手的朋友做个参考。整篇文章适合这几类人看一是只想让手机干净一点、又不想为删个预装App承担Root风险的人二是已经装了ADB工具但只知道adb install和adb logcat不知道还能这么玩的人三是手里有电视盒子、模拟器想同样靠ADB瘦身的折腾党。看完你可以照着一步步操作也可以直接把我给的命令拿过去改一改就用。1. 为什么是ADB不Root也能卸载预装应用靠的是什么机制先搞清楚一个核心问题为什么手机设置里“卸载”按钮是灰的而ADB却能把系统应用删掉这要从Android的存储分区和用户机制说起。1.1 系统分区与用户分区的区别Android的手机存储逻辑上分成两块系统分区一般挂在/system、/product、/vendor这些目录和用户数据分区/data。手机出厂时自带的App也分两种一种是放在系统分区里的“真·系统应用”它们随固件一起刷入分区本身是只读的另一种是厂商通过首次开机引导装进/data/app的“影子预装”本质上和用户自己安装的App没区别只是预置了安装包。前者的卸载按钮必须是灰的因为普通权限根本改不了只读分区后者理论上可以直接卸但厂商把入口藏得深或者跟系统账号体系做了绑定所以设置里同样不给“卸载”。Root做的事情是把只读分区重新挂载成可写然后物理删除那些系统App的文件。这也意味着你动了系统分区后续OTA升级能不能过、厂商检测到root后会不会限制某些功能都是未知数。1.2 ADB到底“动”了哪个机制ADB走的是另一条路。它靠的是Android的多用户机制。Android从很早的版本就支持多用户手机主用户是user 0系统里专门有一套命令允许对某个用户屏蔽某个包而不必删除物理文件。adb shell pm uninstall --user 0 包名这条命令做的事情是在user 0也就是你正在用的这个主人用户里把这个包标记为“已卸载”。注意它并没有删掉系统分区里的文件包还在磁盘上只是当前用户看不见、也用不了了。我习惯用一个比喻系统分区是房子交付时自带的固定衣柜你不喜欢但拆不掉墙Root相当于把墙砸了把柜子拖出来工程量巨大还可能动到承重墙ADB的做法是把那间房间的门锁上钥匙还在开发商手里你眼不见心不烦哪天反悔了拿钥匙再开门就行。有这个机制兜底就解释通了三个现象第一ADB不需要Root第二这样删完系统应用OTA升级一般不受影响第三恢复出厂设置后这些应用全部“复活”。这既是它的安全性所在也是很多人第一次用ADB删除时容易懵的地方——明明显示Success怎么恢复出厂后又全回来了。1.3 与Root卸载的取舍对比我把几种常见方案的差异整理成了一张表方便你对照自己的诉求做决定方案权限要求是否需要解锁Bootloader影响OTA升级恢复难度典型场景Root后直接删系统AppRoot通常需要可能受影响部分机型升级会卡无限重启麻烦需要刷机救砖深度精简、改机型参数ADBpm uninstall --user 0只开USB调试不需要一般不影响低pm install-existing或恢复出厂即可清理预装、去广告、瘦身设置里手动“停用”不需要不需要不影响最低设置里重新启用即可不确定会不会误删时试探第三方冻结工具如冰箱等需ADB或Root授权视工具而定一般不影响低工具内解冻即可需要定时冻结、批量管理大列表对我这种主要诉求是“去掉用不上的预装、不弹通知、桌面别那么乱”的人来说ADB方案是性价比最高的。只有当你需要删除预装应用之后留下的残留文件也一起清掉、或者要改系统级配置时才需要咬牙上Root。2. 从零搭好环境驱动、工具包和USB调试的三件套很多人卡在这步就不动了觉得“配置环境”是程序员才干的事。其实ADB环境配置的难度远低于你的想象我把每一步拆开写清楚。2.1 ADB工具包下载、安装与环境变量ADB承载在Google官方发布的platform-tools里里面包含adb.exe、fastboot.exe等一堆文件。最稳妥的获取途径是Android开发者官网解压出来就能用。不愿意折腾环境变量的Windows上有一些一键安装脚本比如网上经常被提到的“15 seconds ADB installer”双击后一路回车它会自动把platform-tools装好并配置好系统PATH。我个人的习惯是手动解压到固定目录因为后续如果要配合脚本用路径清晰好排查。以一个Windows系统为例下载platform-tools-latest-windows.zip。解压到C:\adb确保C:\adb\adb.exe存在。按WinR输入sysdm.cpl打开“环境变量”在用户变量的Path里新增一行C:\adb。打开新的命令提示符输入adb version看到版本号说明配置成功。macOS和Linux用户更简单把zip解压后加软链到/usr/local/bin或者直接把路径写进~/.zshrc的PATH即可。如果你只是临时用一次懒得配环境变量直接在platform-tools目录里按住Shift右键选择“在此处打开命令提示符/终端”也能跑adb命令效果一样。2.2 手机端开启开发者选项与USB调试手机端要准备两步先隐藏地打开开发者选项再打开里面的USB调试开关。大多数手机是进“设置 - 我的设备/关于手机”找到“版本号”连续点击7次左右系统会提示“你已进入开发者模式”。有几家厂商的入口藏得比较深我列一下常见情况小米/MIUI在“设置 - 我的设备 - 全部参数与信息”连点“MIUI版本”7次开发者选项里建议把“USB调试”和“USB安装”都打开部分机型还需要登录小米账号开启“USB调试安全设置”否则某些命令会被拒绝。华为/荣耀在“设置 - 关于手机”连点“HarmonyOS版本”或“版本号”。vivo/Oppo系一般在“设置 - 我的设备关于本机 - 更多参数”连点“软件版本号”。三星在“设置 - 关于手机 - 软件信息”连点“编译编号”。打开开发者选项后在“设置 - 开发者选项”里找到“USB调试”打开即可。大部分手机还会让你确认“允许USB调试吗”记得勾选“始终允许使用这台计算机进行调试”。2.3 用 adb devices 完成第一道连接校验环境配好、手机打开USB调试之后拿数据线把手机连上电脑电脑弹窗或手机弹授权框时点允许然后在你准备好的命令行窗口里输入adb devices正常情况下会看到类似这样的输出List of devices attached R5CT1234567 device后面显示device就是连接成功、调试通道已建立。这里要注意状态分为几种device正常状态可以执行所有ADB命令。unauthorized手机弹窗没点允许或者授权被撤销。offline驱动异常、数据线只充电不传数据、或adb服务状态卡死。no permissions多见于Linux系统需要加USB设备udev规则Windows上一般不会出现。第一次连接时如果弹了授权框一定要在手机上勾选“一律允许”然后点确定否则会一直卡在unauthorized。这条之前困扰我很久后面第6章会专门展开排查链路。数据线也是个高频坑很多线只能充电不能传数据插上去adb devices永远看不到设备换一根正规的数据线基本秒解。3. 定位目标从上百个包名里揪出要卸载的那一个环境通了以后下一步不是急着敲卸载命令而是搞清楚“我要删的那个应用包名叫什么”。Android不按App显示名管理而是按包名package name管理比如微信的包名是com.tencent.mm抖音是com.ss.android.ugc.aweme。拿到包名就等于拿到了索命符。3.1 先列包名再操作pm list packages 的几种用法列出手机上所有包的命令是adb shell pm list packages这条命令会输出几百行包名你看得眼花所以一般要配合参数和过滤# 只看系统应用 adb shell pm list packages -s # 只看用户安装的第三方应用 adb shell pm list packages -3 # 按关键字过滤Windows用findstrmacOS/Linux用grep adb shell pm list packages | findstr miui adb shell pm list packages | grep bilibili强烈建议你在删第一包之前先做一件事把完整包名列表备份下来。adb shell pm list packages 原始包名列表.txt这份名单就是后悔药。后面误删了、手滑了、或者想恢复某个应用时查它就能快速找到原始包名不至于两眼一抹黑。3.2 从桌面图标反查包名不认识的包怎么确认更常见的情况是我看到桌面上那个App叫“游戏中心”“视频”“钱包”但我不知道它的包名是什么。这时候有个非常实用的小技巧——先在手机上点开那个App让它停在前台界面然后在电脑上执行adb shell dumpsys window | findstr mCurrentFocusmacOS/Linux用adb shell dumpsys window | grep mCurrentFocus输出结果里会出现类似mCurrentFocusWindow{a1b2c3d4 u0 com.vivo.gamecenter/.activity.MainActivity}前面那一段com.vivo.gamecenter就是当前正在前台运行的App包名。这个方法对绝大多数机型有效因为Android系统服务一定会记录当前焦点窗口。如果这条命令在你的新系统上查不到可以退而求其次在手机的“设置 - 应用管理”里点开目标App有的系统会直接显示包名或者进入“存储”页面后右上角会有入口再不行就用“开发者选项 - 正在运行的服务”这里通常也会列出服务所属的包名。多试几招总能对上号。3.3 厂商预装包名的规律与社区清单的用法各家厂商为自己的预装应用命名包名时习惯用自家域名当前缀摸清规律后能少走很多弯路厂商/类型包名特征典型示例小米/红米com.miui.*com.miui.video、com.miui.browser、com.miui.gamecentervivocom.vivo.*、com.bbk.*、com.iqoo.*com.vivo.gamecenter、com.vivo.hiboardOppo/一加/真我com.oplus.*、com.coloros.*、com.heytap.*com.oplus.browser、com.coloros.video华为/荣耀com.huawei.*、com.honor.*com.huawei.appmarket、com.honor.appmarket运营商定制应用com.*.chinaunicom、com.*.mobile等各类电信/移动/联通营业厅、应用商店网上一搜“vivo adb精简列表”“小米ADB删除列表”能找到大量现成的包名清单直接照搬能省不少查包名的时间。但要注意包名清单有版本时效性同一个厂商在不同Android版本上会新增应用、改名应用。我每次拿到新列表都会先截个图、先备份当前包名再逐个和pm list packages的输出比对确认手机上确实有这个包才动手。4. 动手卸载uninstall、disable-user 与回滚恢复到了真正下命令的环节了。这里有个关键点很多人第一次都搞反卸载普通应用和卸载系统应用命令并不一样。4.1 普通应用和系统应用的卸载命令为什么不同如果你要删的是自己装的第三方App直接执行adb uninstall com.example.app或者等价地adb shell pm uninstall com.example.app这会把App彻底从/data分区移除属于物理删除。但是对系统自带应用直接跑这条命令往往会失败报Failure [DELETE_FAILED_INTERNAL_ERROR]或者SecurityException原因就是之前说的系统分区只读普通卸载指令根本无权改动。正确姿势是给卸载命令指定“用户范围”adb shell pm uninstall --user 0 包名比如我想删掉某手机上的自带游戏中心adb shell pm uninstall --user 0 com.vivo.gamecenter执行成功后会返回Success。有的手机桌面图标马上消失有的要等几秒刷新都是正常的。这条命令的含义是仅针对user 0主人用户卸载这个系统应用。文件还留在系统分区但当前用户不可见了。4.2 卸载、冻结、停用三种状态的应用场景跟卸载类似还有一个动作叫“冻结”对应命令adb shell pm disable-user --user 0 包名 # 恢复时用 adb shell pm enable 包名“停用”是在手机设置里就能做的操作但ADB冻结更彻底App从桌面、应用列表、启动器里完全消失也不会被任何应用拉起。这三种状态到底选哪个我的建议是确认这个App这辈子都用不上的比如运营商定制商城、旧版视频App选卸载pm uninstall --user 0。不确定以后是否需要、但当前绝对不想看到的比如系统自带浏览器、健康App、某些“AI助手”选冻结pm disable-user --user 0。只是嫌通知烦的直接在设置里停用就行没必要上ADB。“红米K70这类新机能用ADB冻结吗”最近被问得很多答案是能。新机型MIUI/HyperOS对部分系统应用加了保护直接卸载可能提示失败但冻结命令通常能生效。冻结最大的好处是可逆出问题一条命令就能解除对新手尤其友好。4.3 批量清理脚本与误删恢复一个个敲命令太累批量处理才爽。我的做法是先把要删除的包名按一行一个放进文本文件然后写个循环脚本。Windows批处理示例echo off for /f %%i in (remove_list.txt) do ( echo 正在卸载 %%i adb shell pm uninstall --user 0 %%i ) pausemacOS/Linux/bash示例while read -r pkg; do echo 正在卸载 $pkg adb shell pm uninstall --user 0 $pkg done remove_list.txt跑完看到一溜Success手机会瞬间安静下来那种清爽感谁试谁知道。万一删错了也别慌恢复手段有几种系统应用误删用adb shell pm install-existing 包名恢复这条命令会在当前用户下重新注册原包。如果不支持恢复出厂设置也能让所有预装应用回来代价是数据清空。只是冻结不是卸载adb shell pm enable 包名命令行一敲就恢复。普通应用误删重新去应用商店装回来就行或者当初有备份APK的话用adb install 备份.apk。恢复出厂设置这个兜底方案恰恰印证了第1章说的ADB卸载系统应用并没有破坏物理文件所以它也给了你“彻底删除”之外的一条安全退路。5. 哪些软件千万别手滑系统应用禁区与灰色地带ADB再稳也经不住你把关键系统组件删了。这一章我列一下绝对不能碰的禁区以及一个能帮你避免翻车的方法论。5.1 删了会连锁崩溃的绝对禁区以下这些包不管它们看起来多“鸡肋”都不要用ADB命令去卸载或冻结包名特征实际作用删除/冻结后果com.android.systemui系统UI包括状态栏、通知栏、快捷开关系统界面直接崩溃手机变砖的体验com.android.phone电话/通话/基带交互核心无法拨号有些机器会反复“电话服务已停止”com.android.settings设置应用本体进不去设置很多功能失灵com.android.launcher3或厂商桌面如com.miui.home、com.vivo.launcher桌面启动器桌面基本等于没了只剩黑屏输入法如com.sohu.inputmethod.sogou、com.baidu.input等键盘输入看似能删但删完你会发现打字都没法打必须准备备用输入法Google服务框架com.google.android.gms推送、地图、账号体系的基础大量依赖GMS的App闪退或无法登录删系统UI这种操作几乎等于给自己手机判了“植物人”状态只能靠刷机或恢复出厂解决。所以我给自己定的规则是见到com.android.开头的包先过一遍脑子再动手见到com.android.systemui、com.android.phone、com.android.settings永远不动。5.2 可删但要注意的灰色区域相对安全但也别头脑发热就删的是厂商的“增值应用”比如厂商自带的视频、音乐、阅读、游戏中心、浏览器换皮版钱包/支付类应用部分机型的NFC刷卡、公交卡依赖它删了可能连刷卡都用不了应用商店下载、更新App都靠它删了后续装App会麻烦智能助手/语音助手有些系统功能里嵌了“唤醒词”组件冻了之后设置项可能报错这些应用本身不带系统核心逻辑删掉不会导致开机失败但可能影响厂商的系统体验完整度。比如小米删了“小米视频”有时候主题商店里的某些在线资源无法播放“钱包”删掉后NFC门禁卡模拟功能可能一并失效。所以我的习惯是可删可不删的东西先冻结不冻结几天心里不踏实再卸载。5.3 保守派方法论先停用再观察实际操作中我不太赞成“列一份大名单一次全卸光”的激进玩法。厂商的系统组件之间常常存在隐形依赖你今天删掉A看着没问题下周系统更新某个原本依赖A的功能模块突然报错届时你根本想不到是A的锅。保守派的做法是把疑似要删的应用用一个清单记下来。第一轮先用pm disable-user --user 0冻结。正常使用手机3到5天留意有没有应用异常、系统设置项缺失、推送中断。确认无恙再把冻结状态转成真正的卸载pm uninstall --user 0。一旦发现任何异常立即用pm enable或pm install-existing恢复。这个流程虽然慢但基本不会翻车是我向所有非发烧友朋友推荐的标准姿势。6. 实战避坑集unauthorized、offline与厂商限制的排查链路最后聊聊实际操作中一定会遇到的那些坑。我把从开始用ADB到现在踩过的、以及被问过最多的几种问题整理成一个排查链路按顺序操作基本都能解决。6.1 adb unauthorized 的根因与完整处理链路adb devices显示unauthorized说明USB物理链路是通的但手机端没有授权这台电脑。其原因绝大多数是首次连接时那个“允许USB调试”的弹窗被忽略了或者点击了拒绝还有种情况是你之前在手机上撤销过“USB调试授权记录”。处理链路按这个顺序来断开USB线。手机打开“开发者选项”找到“撤销USB调试授权”点掉。重新插线手机重新弹授权框勾选“始终允许”点“允许”。电脑上执行adb kill-server再执行adb start-server最后adb devices查看状态。如果还不好接着检查电脑端的驱动。Windows上可以装一个Google USB Driver或者对应的手机品牌驱动小米助手、华为手机助手等再重试上面的步骤。我遇到过一台老设备换了USB口、换了线才解决所以顺序上建议先软后硬先撤销授权重连再换线、换口最后才怀疑驱动。6.2 设备 offline、频繁断开与无线调试offline和unauthorized是两种完全不同的状态。offline往往意味着adb服务拿到的设备信息不可用常见原因有adb服务状态异常。先adb kill-server再adb start-server最后重新adb devices。USB线只供电不传数据。换线是性价比最高的排查。USB口供电不足。优先插机箱背面主板上的USB口别用前置面板或Hub。手机上USBMode被设置成了“仅充电”。如果是有线连接总不稳定Android 11及以上系统还有无线调试选项省掉线材烦恼。开启路径是“开发者选项 - 无线调试”进去后点击“使用配对码配对设备”屏幕上会出现IP地址、端口和6位配对码电脑上执行adb pair 192.168.1.100:37123 # 提示输入配对码时输入屏幕上的6位数字配对完成后再用屏幕显示的调试端口执行adb connect 192.168.1.100:39123这样也能连上而且比USB线省事很多。无线调试对手机和电脑处在同一局域网有要求公司网络隔离严格的时候可能连不上家里环境基本没什么问题。6.3 厂商限制与常见报错不同厂商对ADB卸载的“防呆”程度不一样这是最容易让人产生“我是不是操作错了”错觉的地方。我整理几个高频报错和应对思路报错信息含义常见场景与处理Failure [DELETE_FAILED_INTERNAL_ERROR]卸载失败系统拒绝删除该包系统应用直接adb uninstall时会遇到改用pm uninstall --user 0Failure [INSTALL_FAILED_USER_RESTRICTED]当前用户被限制执行安装/卸载多见于小米、ColorOS打开“USB安装/调试安全设置”后重试SecurityException: Shell does not have permissionShell权限不足部分厂商对敏感系统包做了保护用冻结替代卸载或检查是否误挡了系统核心包Device unauthorized/offline设备连接状态异常按6.1和6.2排查链路处理pm install-existing恢复失败恢复包时无法注册先用pm enable 包名试试或者接受“恢复出厂”兜底vivo/OriginOS和ColorOS在Android 13、14上对预装应用卸载的限制尤其严格很多包即使指定--user 0也会报安全异常。这时候我的建议是放弃卸载改用冻结冻结再不行就在手机的“应用管理”里找找隐藏的“卸载更新”入口把应用退回到出厂版本后再设“停用”。6.4 电视盒子、模拟器与几个高频延伸场景ADB的价值不止于手机。很多电视盒子、模拟器上的预装App比手机更恶心又没法用常规方式卸载这时候同样的思路可以复用。智能电视方面以老款创维电视为例电视设置里的“开发者选项”打开ADB后通常要在电脑上先连接电视IP常见命令是adb connect 192.168.1.101:5555有的电视型号会要求在电视屏幕输入动态密码或者通过计算器算出开关密码这属于厂商的验证机制。建议先找对应的官方说明或者问售后不同型号规则差异很大别照搬网上流传的计算器就乱点。模拟器这边夜神模拟器自带的就是一个定制版ADB路径在安装目录下的nox_adb.exe连接本机模拟器常用nox_adb.exe connect 127.0.0.1:62001连接后同样用pm list packages和pm uninstall --user 0来清理模拟器内置应用操作逻辑和手机完全一致。最后顺带说几个大家搜索频率很高的ADB延伸用法都挺实用抓取日志adb logcat看实时日志adb logcat -c先清空再抓排查App闪退必备。截图adb shell screencap -p /sdcard/screen.png然后adb pull /sdcard/screen.png适合做软件演示、写教程。传文件adb push 本地文件 /sdcard/目标路径adb pull /sdcard/目标路径 本地目录。设置屏幕刷新率部分机型可以通过adb shell settings put system peak_refresh_rate 120、adb shell settings put system min_refresh_rate 120调整前提是系统里存在这些键值不要盲目照抄。授予应用无障碍权限无障碍权限不是普通运行时权限不能用pm grant一步到位但可以通过把服务写入adb shell settings secure enabled_accessibility_services来实现这是很多自动点击类工具的原理。不过说到这我得提醒一句用ADB模拟点击去做“企业微信自动打卡”这类自动化既容易失效也可能踩到公司管理制度甚至合规红线原理可以了解别真用在考勤这种敏感场景。我在实际清理过程中还发现一个小技巧顺手分享给你每次批量卸载前把adb shell pm list packages的结果同时存成txt和截图各一份。txt方便给脚本读截图方便手机上随时翻看原始包名。有了这份“后悔药”你下命令的时候手会稳很多。ADB这套工具会用之后你会发现自己对手机的掌控力提升了一个档次。清理预装只是它最日常的一种玩法往里再走一步还有活动管理、应用冻结、日志分析等更大世界。希望这篇踩坑记录能让你少走弯路动手之前记住一句话先冻结再卸载能恢复就不慌。
返回列表