news 2026/10/2 1:18:34

用ADB卸载安卓预装软件:不Root也能彻底清理系统应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用ADB卸载安卓预装软件:不Root也能彻底清理系统应用

拿到新手机的第一件事,你们是贴膜还是买壳?我的习惯是先开机、激活,然后打开应用列表,看着那一排排从来不会点开的预装软件,血压就开始往上飙。什么“应用商店”“游戏中心”“视频VIP”“生活服务”,每一个都像牛皮癣一样占着桌面、后台偷偷跑流量、时不时弹条通知。早些年我还会用root权限把这些东西连根拔掉,后来厂商锁得越来越死,root的成本和风险都不划算。于是,我转向了adb这套更安全、更优雅的方案,只用一条命令就能把大部分系统预装软件从眼前“请走”,不需要root,不影响正常保修,而且万一后悔了还能一键恢复。

这篇文章要聊的就是整套adb卸载系统软件的操作思路,从原理、环境配置到具体命令,再到我踩过的各种坑,一次说清楚。适合手里有安卓手机、烦透了预装软件、又不想root折腾的新手,也适合已经会basic操作但想搞明白“为什么这样卸载”的进阶玩家。全程不碰危险操作,不推荐你乱删系统组件,只挑那些真正影响体验的预装应用下手。

1. 项目思路与卸载原理拆解

1.1 为什么选adb而不是root或冻结

很多人一听“卸载系统软件”,第一反应就是root。确实,root以后用钛备份、Link2SD这类工具删得干干净净,但代价也不小:手机失去官方保修、银行类App可能检测到root后拒绝使用、系统OTA升级容易失败,更不用说root过程中一个不小心就可能变砖。对大多数人来说,为了删几个预装软件去承担这些风险,性价比太低了。

adb方案走的是另一条路。它的全称是Android Debug Bridge,翻译过来就是安卓调试桥,本质上是电脑和手机之间的一条官方调试通道。通过这条通道,你可以给手机下发各种指令,其中就包括对某个用户卸载应用。关键点在于,adb卸载只对“当前用户”生效,并不是把系统分区里的安装包物理删除。所以手机本身依然处于“未root”状态,系统完整性没有被破坏,厂商的保修通常也不会因为这个被拒。这就像你把衣柜里一件不穿的衣服收进了储藏室,抽屉里看不到了,但衣服还在家里,想穿随时能拿回来。

曾经有人劝我直接用adb shell pm disable去禁用应用,说这个比卸载更“温柔”。这话有道理,disable确实是把应用彻底停用,连启动入口都隐藏了,效果和卸载差不多。但disable有个小坑:部分厂商的系统设置里会给你列出一堆“已停用应用”,用户手一抖又给启用了。而uninstall方式卸载后,应用直接从当前用户的数据空间里移除,逻辑上更干净,也不会出现在停用列表里。

1.2 系统应用卸载的边界问题

不是所有预装软件都能用adb卸掉,这个一定要提前说清楚。Android系统对应用有一套保护机制,大致分三类:

第一类是核心系统组件,比如电话、短信、设置、系统UI这类,它们直接参与系统运行,包名往往是com.android.phone、com.android.settings这种,卸载命令执行后通常会报错或者直接忽略,就算强制卸了,系统也会崩得很难看。第二类是被厂商标记为“受保护”的应用,像小米的MIUI、华为的EMUI、vivo的OriginOS都有自己的预装保护策略,部分应用你发卸载命令,系统会返回Failure,这种就没必要硬刚了。第三类是普通的预装软件,比如视频App、新闻资讯、某个游戏中心,这些是卸载的主要目标,成功率很高。

说句实话,现在国产手机厂商也在收敛,很多机型在系统设置的“应用管理”里就能直接卸载一部分预装软件。但总有一些“钉子户”藏在系统目录里,桌面删不掉、应用管理里也只能“强行停止”,这个时候adb就派上用场了。我见过最典型的就是某些品牌的“快应用”和“服务与反馈”,这俩基本就是广告入口,用adb卸掉之后,通知栏瞬间清净很多。

1.3 adb卸载的核心机制:user 0与pm命令

聊到这里,就必须接触两个关键概念:user 0和pm命令。

安卓系统从Android 4.2开始支持多用户模式,一台设备可以有多个“用户”,而user 0就是这台设备的主人,也就是你们日常登录使用的那个主用户。adb卸载时用到的--user 0参数,意思是“只对主用户执行卸载操作”,不碰系统底层的安装文件。所以你会发现,卸载之后手机的存储空间并没有明显增加,因为应用本体还躺在/system/app或/product/app分区里,只是“在当前用户下不可见了”。

pm是Package Manager的缩写,可以理解为安卓系统的包管理器客户端。你向adb shell里输入pm uninstall -k --user 0 包名的时候,系统做的事情是:把该应用从user 0的已安装应用列表里移除,同时保留-k参数指定的数据文件。去掉-k也可以卸载,但应用的数据目录也会被清空。我个人的习惯是留着-k,万一以后恢复安装,数据和账号信息还在,省得重新登录。

2. 零基础准备:环境搭建与连接测试

2.1 下载adb工具包与环境变量配置

市面上各种“一键adb工具”“adb安装助手”很多,我建议还是老老实实去Google官方下载Android SDK Platform Tools,这个压缩包里包含了adb、fastboot等常用工具,干净没有捆绑,也不用担心第三方改过代码。下载之后解压到一个固定目录,比如Windows下放到D:\platform-tools,macOS或Linux放到~/platform-tools,然后把这个目录加入系统的环境变量。

配置环境变量这一步很多人嫌麻烦直接跳过,结果每次用adb都要先cd到解压目录,非常别扭。Windows下操作路径是:右键“此电脑”->“属性”->“高级系统设置”->“环境变量”,在“系统变量”里找到Path,点编辑,新建一行把D:\platform-tools填进去。配置完后重新打开一个命令行窗口,输入:

adb version

如果能看到版本号输出,说明环境变量生效了。macOS和Linux用户则是在~/.bashrc或~/.zshrc里加一行export PATH=$PATH:~/platform-tools,然后source ~/.bashrc刷新。

2.2 手机开启开发者模式与USB调试

这一步是必经之路。打开手机的“设置”->“关于手机”,找到“版本号”那一栏,连续点击7次左右,系统会提示“你已进入开发者模式”。不同品牌的入口稍有差别,有的叫“版本号”,有的叫“软件版本号”,但原理都一样——点击次数触发隐藏开关。

然后回到设置首页,找到新增的“开发者选项”,在这个页面里打开“USB调试”开关。这里要注意,华为、小米、vivo等部分机型还需要打开“USB安装”和“USB调试(安全设置)”,否则连接电脑后权限不完整。我自己的习惯是,在刚开始折腾的阶段把“USB调试”和“仅充电模式下允许ADB调试”都打开,避免因为充电模式判定问题导致adb devices一直看不到设备。

2.3 连接电脑并解决设备识别问题

用数据线把手机连到电脑上,第一次连接时手机会弹出“是否允许USB调试”的授权窗口,勾选“始终允许”,然后点击确定。如果手速慢了没点,或者不小心点了拒绝,可以拔掉数据线重插,或者去开发者选项里点“撤销USB调试授权”再来一次,不影响什么。

接着在电脑命令行里输入:

adb devices

正常情况下会看到类似输出:

List of devices attached R5CT10ABCDE device

最后一列是device就对了。如果看到的是unauthorized,说明手机上的授权弹窗没确认;如果看到offline,一般是adb服务或驱动出了问题,可以试试先执行adb kill-server再adb start-server。要是什么都没有,那就是驱动问题了,Windows用户去设备管理器里看看有没有带黄色感叹号的设备,手动更新一下驱动就好。

3. 核心实操:从包名定位到成功卸载

3.1 学会查看系统里装了哪些包

adb连接成功之后,下一步就是搞清楚目标应用的包名。所谓包名,就是安卓应用的唯一身份标识,格式一般是类似com.xxx.xxx这样的字符串。卸载命令只认包名,不认你在桌面上看到的那个App名字,所以第一步就是查包名。

查看所有已安装应用的包名,用这个命令:

adb shell pm list packages

输出会是一长串列表,每一行一个包名。如果只看系统预装软件,加个-s参数:

adb shell pm list packages -s

如果想找某个特定应用,用grep过滤是最快的。比如我在vivo手机上想找“应用商店”的包名,记不清完整叫什么,只记得大概有“appstore”几个字母,那就执行:

adb shell pm list packages | grep appstore

输出结果里通常会出现com.bbk.appstore这样的包名,这就是目标了。

3.2 没经验时怎么快速分辨包名对应哪个应用

grep关键词猜包名,需要一点运气和眼力。如果你对某个应用实在猜不出包名,有两个笨办法但非常有效。

第一个办法是去手机“设置”->“应用管理”里点开目标应用,详情页底部通常有一行“包名”或“版本信息”里藏着完整包名。部分国产系统把包名显示藏得比较深,要连续点击“版本号”几次才能看到,但基本都能找到。

第二个办法是用adb直接读当前手机上正在运行的进程。先把目标App在手机上启动起来,然后执行:

adb shell "ps | grep -i vivo"

如果你知道目标应用大概属于哪个厂商,比如vivo的手机,那grep vivo就能筛出一堆vivo相关进程,当前正在运行的进程里就有目标应用的包名。这个方法在“应用没有在桌面显示图标但确实在后台运行”的场景下特别好用。

3.3 卸载命令的正确姿势与参数说明

找到了包名,就到了最解气的一步。卸载命令的完整写法是:

adb shell pm uninstall -k --user 0 包名

拿我自己的一台vivo手机举例,我卸载“vivo浏览器”时执行的是:

adb shell pm uninstall -k --user 0 com.vivo.browser

命令执行后,如果看到Success,说明卸载成功。回到手机桌面,那个预装浏览器的图标已经消失了。整个过程手机不需要root,系统也没有任何警告提示,简直不要太安静。

关于参数,我再说细一点。-k的意思是保留应用数据,--user 0表示只对主用户执行卸载。如果你把--user 0去掉,直接执行pm uninstall 包名,实际上是在尝试彻底卸载应用,但系统通常会拒绝你删除受保护的系统应用。所以,--user 0这个参数就是win10上“卸载当前用户程序”和“删除整个程序”的区别,前者安全可逆,后者风险极高。

一次可以卸载多个应用吗?可以,但没必要写成一条命令连续执行。我更推荐在命令行里把多个pm uninstall -k --user 0 包名命令放在一个批处理脚本里执行,这样万一某个包名写错了,你能清楚地看到哪个命令报错,排错更方便。

3.4 卸载失败的常见报错与对策

卸载不是每次都能成功,我遇到过好几种报错,这里挑典型的说一下。

第一种是Failure [DELETE_FAILED_INTERNAL_ERROR],这个报错翻译过来就是内部错误删不掉。多半是这个应用被厂商加入了保护名单,或者是核心组件不支持卸载。遇到这种情况我建议放弃,不要尝试强删,因为厂商这么设计是有理由的,硬来的后果可能是系统功能异常。

第二种是Failure [DELETE_FAILED_DEVICE_POLICY_MANAGER],意思是该应用被设为了设备管理器。比如很多企业定制的MDM应用、某些安全防护软件就是这种情况。解决办法是先解除它的设备管理器权限,路径一般在“设置”->“安全”->“设备管理应用”里,取消勾选后再执行卸载命令。

第三种是Security exception: Package ... is a system component,这个最干脆,系统直接告诉你这是核心组件,不许动。没什么好纠结的,换个目标吧。

3.5 误删后的恢复操作

玩adb最怕什么?最怕卸载的时候一时手快,把不该卸载的给卸了,然后发现某个功能用不了了。别慌,恢复命令也很简单,不需要重新刷机。

已卸载的应用恢复安装,执行:

adb shell cmd package install-existing 包名

这个命令的含义是“重新安装系统中已存在的包”,因为系统分区里安装包没被删除,所以能快速恢复。如果你当时卸载时带了-k参数,连应用数据都还在,恢复后登录状态都不用重新弄。

如果你用的是pm disable而不是uninstall,恢复启用命令是:

adb shell pm enable 包名

我建议所有adb折腾爱好者都把这几个命令存在备忘录里,我就是有一次在怒气冲冲清理预装时误删了某个输入法组件,结果打字全乱码,急得满头汗,后来冷静下来用install-existing一分钟就恢复了。

4. 常见问题与排查技巧实录

4.1 设备列表看不到手机或一直unauthorized

这是新手最容易卡住的地方。adb devices执行后,要么列表里啥也没有,要么状态是unauthorized,啥也干不了。

如果是unauthorized,最直接的办法是点掉手机上的调试授权弹窗,重新允许调试。如果手机没弹窗,去开发者选项里“撤销USB调试授权”,拔线重插一次。还不行就重启adb服务:

adb kill-server adb start-server adb devices

如果列表里干脆没有设备,重点检查三件事:一是数据线是不是只能充电不能传数据,我遇到过好几次这种“阉割线”;二是手机和电脑连接的USB模式是不是“仅充电”,有些手机在仅充电模式下不会开启adb,需要手动切换成“文件传输”或“传输照片”;三是Windows下驱动是否正确安装。把这三关都过了,设备识别基本就是秒级的事。

4.2 卸载后应用自动更新或图标残留在桌面

这个现象很常见,我刚折腾的时候也一脸懵。刚用adb卸载完某个预装应用,桌面图标确实消失了,但过了几天它又回来了,或者应用商店提示“可升级”。

原因很简单——你的账号关联了该应用的云备份信息,系统在某种条件下会尝试恢复已卸载的应用。另外一个更直接的原因是厂商的“应用自修复”机制,某些安全应用会定期检查系统预装应用列表,发现“缺失”的就自动装回来。

应对方法有两个思路。第一个思路是卸载完之后,顺手把应用商店里对应的“自动更新”关闭,不同系统入口不一样,但基本都在应用商店设置里。第二个思路是用pm disable-user --user 0 包名代替pm uninstall,disable方式停用后部分厂商的自修复机制不会介入,比卸载更“稳”。但需要注意,disable和uninstall在系统里的状态表示不同,如果你先disable再uninstall,部分机型会报错,常规做法是二选一,别混着来。

4.3 卸载系统更新或“去广告”后部分应用闪退

有些朋友清理预装软件的同时,还想顺手把系统更新给干掉,或者用adb删掉系统的广告组件。我的经验是:这类操作务必谨慎。系统更新进程一旦被卸载,你的手机确实安静了,但很多新机型的系统安全补丁也无法再安装。广告组件往往和系统UI、桌面、主题商店存在依赖关系,删掉一个可能连带桌面崩溃或者设置页面打不开。

真的遇到这种情况,别慌,还是老办法,用install-existing把相关包恢复回来。我个人的原则是:宁可保持系统功能完整,也不要为了省那几百MB空间去冒系统不稳定的风险。预装软件看着碍眼,但它占用的空间其实很有限,真正该清理的是那些自启动、后台耗电的应用行为。

4.4 常见问题速查表

问题现象可能原因排查方法
adb devices无输出驱动未装/数据线无数据功能换数据线、装驱动、换USB口
adb devices显示unauthorized手机未确认授权弹窗撤销授权后重连、重启adb服务
卸载报DELETE_FAILED_INTERNAL_ERROR厂商保护或系统核心组件确认包名无误后放弃该应用
卸载后图标还在图标是桌面快捷方式缓存重启桌面或重启手机
卸载后应用又回来账号云同步/厂商自修复用disable-user替代uninstall
恢复时报not installed包名拼写错误或无此包重新查包名后再执行命令
系统桌面崩溃闪退误删了桌面或系统UI相关组件尽快install-existing恢复

这张表是我实际折腾过程中最常遇到的场景汇总,建议存下来备用。

5. 实操心得与避坑建议

5.1 我的个人清理原则:先记录,再动手,留后路

折腾adb卸载这几年,我总结出来一套自己的流程,分享给你们参考。

第一步,卸载前先备份。拿一张纸或在备忘录里,把你要卸载的包名全部列出来,注明这个应用是什么、为什么卸。万一后来发现哪个功能依赖它,照着清单恢复就行。第二步,先禁用后卸载。如果你对一个应用的作用不太确定,先用pm disable-user --user 0 包名把它停用,用一两天手机,确认没有异常再去uninstall -k --user 0。这个“过渡期”策略能避免很多误删事故。第三步,逐个卸载,别批量操作。批量脚本效率高,但出错了不好定位,我只有在一个品牌手机的清理方案完全成熟之后才会用脚本一次处理。

5.2 哪些应用建议保留别乱动

虽然标题叫“卸载预装软件”,但真的不是每一样都该卸。以我的经历来看,下面这几类应用就算再碍眼也建议保留:

系统更新服务、应用商店可以卸载但要想清楚后果,而电话、短信、联系人存储、系统UI、设置、输入法这几个是绝对的底线,一个都不能动。定位服务、蓝牙服务、NFC服务看起来不起眼,但它们和大量第三方应用有交互,卸载后可能引发连锁反应。和账号体系绑定的应用,比如厂商账户、云服务,也别动,动完可能出现账号无法登录、数据无法同步的麻烦。

我的建议是,把注意力放在那些“娱乐内容型”预装软件上,比如视频App、游戏中心、资讯类应用、浏览器、音乐App,这些卸载了基本对系统没影响,还能还你一个清净的桌面。

5.3 后续还能怎么玩:adb的进阶用法

整套卸载流程走顺之后,你会发现自己手里多了一把好用的“安卓瑞士军刀”。除了卸载,adb还能干不少事,比如抓取应用日志看谁在后台搞小动作:

adb logcat -d > log.txt

也可以查看当前耗电排名,定位偷电的应用:

adb shell dumpsys battery

还能设置屏幕刷新率、模拟点击操作、查看前台Activity等等。我在实际使用中发现,从“清理预装软件”这个入口学会adb,再往外延伸学习其他命令,是最不痛苦的学习路径,因为每一条命令都能解决一个具体的问题,反馈非常及时。

5.4 最后一个建议

最后再分享一个小技巧:把手机连接到电脑之前,先打开开发者页面看一眼USB调试是否真的开启了,另外建议把"仅充电模式下允许ADB调试"也打开。很多人以为连上数据线就算连接了,其实没有打开那个开关,adb死活识别不到设备,白白浪费时间排查驱动。这个小坑我踩了不止一回,希望你们别重蹈覆辙。adb这个东西,用得越熟越会觉得它顺手,工具就摆在那,关键是你愿不愿意花十分钟把环境搭好,然后安安静静地享受一个没有广告推送的通知栏。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 1:18:28

Windows10 下 VSCode 配置 C++ 开发环境:MinGW-w64 工具链与调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 1:18:27

FDOA无源定位中GDOP精度分析与热力图生成

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 1:17:19

扫地机器人全场景测试:从实验室到真实家庭的失效验证方法论

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 1:17:18

智能家居硬件开源项目检索与筛选:四大渠道+实操学习顺序

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 1:17:01

多Agent与LGBM双模型:AI炒股系统源码从0到1拆解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/2 1:15:48

微信公众号数据采集工程化方案:合法、稳定、可决策

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华