我手上这台 Redmi 用了两年多,从开机第一天起,桌面上就躺着二十来个这辈子不会点开的图标:小米画报、小米视频、游戏中心、小米商城、用户反馈……占着存储不说,后台还时不时蹦个推送出来。真正让我下决心动手的,是某次清理存储发现这些预装软件加起来占了将近 6 个 G,而我根本找不到一个体面的方式把它们请出去。常规做法无非两种,要么刷第三方包,要么 root 之后用系统级工具强删,但前者折腾、后者直接让保修和支付类应用的安全性打折扣。后来我把目光放到了 MIUI 系统精简工具这条路上——核心就是免 root,靠系统自带的调试接口把内置软件从当前用户空间里摘掉。这套方式不需要解锁 BL,不需要动 system 分区,出问题还能原样装回来。这篇就把我这段时间踩过的坑、验证过的命令、以及哪些东西绝对不能碰,一次性摊开讲清楚,给同样被预装软件困扰、但又不想把手机搞成砖的朋友做个参考。
1. 免 root 精简到底动了什么手脚
1.1 先把"系统应用"这层窗户纸捅破
很多人一听"删除系统应用"就本能地紧张,觉得一定要 root 才行。其实在 Android 的权限模型里,"系统应用"和"用户应用"的差别,本质上是安装位置和签名权限的差别,而不是"能不能删"的差别。系统应用装在/system、/product、/system_ext这些只读分区里,普通用户身份确实动不了它们;但 Android 从 4.2 开始就引入了一套多用户机制,每个应用对每个用户都是独立安装的。pm uninstall --user 0这条命令干的事情,就是把某个应用从"用户 0"(也就是默认的机主账号)这个空间里卸载掉,让它不再出现在你的桌面上、不再参与开机自启,但系统分区里的原始文件一动没动。这就解释了为什么它不需要 root——你只是在动属于你自己的那份用户数据映射,没有去改只读分区。
打个比方,这有点像公司给你配的电脑,预装了一堆软件。你没有管理员权限去卸载它们,但你可以把自己的用户配置文件删掉,重新登录之后那些软件对你这个账号就不显示了。文件还在硬盘上,只是你的账户看不见、也调用不了。--user 0干的就是这件事。
1.2 为什么它比"禁用"更干净,又比"强删"更安全
MIUI 自己也提供过"停用"功能,在应用信息页里能点"停用"。但停用有两个问题:一是部分预装应用被系统标记为不可停用,按钮是灰的;二是停用只是把应用状态切成 disabled,进程虽然不跑了,包体和部分关联服务仍在,某些情况下开机还是会拉起残留的广播接收器。
相比之下,--user 0卸载的效果更接近"真删"。卸载之后,这个包在pm list packages里不再出现,桌面上找不到入口,随包声明的开机自启、定时任务、桌面小部件统统失效。但它又不像 root 强删那样直接把/system里的 apk 抹掉——原始文件完好地躺在系统分区里,所以你随时可以用一条install-existing命令把它恢复回来,不用重新刷机。这是我最终选这条路的核心原因:可逆。手机这种东西,谁都保不齐哪天某个功能突然要用,留一条后路比省那点存储重要得多。
1.3 那这台工具链的边界在哪
说清楚它能干什么,也得说清楚它不能干什么。第一,它删不掉真正跟系统核心绑定的组件,比如 SystemUI、Settings、电话、通讯录提供者,这些即使你执行了卸载命令,系统下一次开机或者关键服务重启时会因为签名依赖被重新拉起,甚至直接导致开机卡 Logo。第二,它管不了签名级别的权限,你没法通过它给应用加权限,也没法改系统行为。第三,依赖系统签名的功能,卸载相关组件后会连带失效。举个例子,最近很多人讨论的 MIUI 国际版里小米钱包和 NFC 的关系——国际版 ROM 的交通卡、门卡模拟逻辑和国内版不一样,如果你把com.miui.tsmclient这类近场支付组件一并精简掉,NFC 刷卡、门禁模拟这一整块就直接哑火,而且不是恢复一个包就能立刻回来的,往往还要重新登录账号、重新激活卡片。所以涉及支付、NFC、云服务的包,动手前务必想三遍。
2. 动手前的准备工作与风险清单
2.1 电脑端只要一个平台工具包
整个流程对电脑的要求低到离谱,一台能装驱动的 Windows、macOS 或 Linux 都行。你需要的是ADB 和 Fastboot 平台工具包(Platform Tools),它是 Android 官方提供的调试命令行集合,包含adb.exe等可执行文件。
下载之后我建议解压到一个纯英文、无空格的路径下,比如D:\platform-tools。别小看这一条,我见过太多人把工具包扔在"我的文档\新建文件夹 (2)"里,然后adb一通报错找不到设备,折腾半天才发现是路径里的中文和括号在作怪。解压完之后,在文件夹里按住 Shift 右键选择"在此处打开命令行",或者直接在当前目录地址栏敲cmd回车,就能在该目录下打开终端,省去配置环境变量的步骤。
验证是否可用很简单,敲:
adb version能打印出版本号就说明工具本身没问题,真正容易出问题的是下一步——手机端的授权。
2.2 手机端那几步看着简单,坑最多
MIUI 打开 USB 调试的路径是"设置 → 我的设备 → 全部参数 → 连点 MIUI 版本号七次"激活开发者选项,然后回到"设置 → 更多设置 → 开发者选项",打开USB 调试。这一步现在有个前置条件需要留意:较新版本的 MIUI 要求登录小米账号并联网一段时间后才允许开启开发者选项,纯离线的新机可能点不开,这不是你操作错了,是系统策略。
插上数据线之后,手机屏幕会弹一个"允许 USB 调试吗"的对话框,一定要勾选"一律允许使用这台计算机进行调试",否则每次重连都要重新点。如果你在公司电脑或者网吧操作,注意别在有他人使用的机器上勾这个选项,调试授权等同于把设备的调试通道交给那台电脑。
这里有个 MIUI 特有的坑:MIUI 对调试授权做了额外限制,有时候即使点了允许,adb devices里显示的还是unauthorized。解决办法一般有两个——一是撤销授权重来,在开发者选项里点"撤销 USB 调试授权",然后重新插拔数据线再点一次允许;二是检查是不是被"USB 调试(安全设置)"之类的选项干扰了,这个选项是用来模拟点击的,跟卸载无关,不用开。实测下来,用原装或者质量好一点的数据线,成功率明显比随手抓的那根充电线高,尤其是那些只能充电不能传数据的线,插上去设备根本认不出来。
2.3 我列了一张"别碰"的黑名单
这部分是全文最该被截图保存的地方。精简的收益是省空间和清爽,代价可能是手机变成一块会发光的砖。下面这些包,除非你非常清楚自己在做什么,否则一个都别动:
| 类别 | 典型包名 | 动了的后果 |
|---|---|---|
| 系统界面 | com.android.systemui | 状态栏、通知栏、锁屏全部消失 |
| 系统设置 | com.android.settings | 无法进入任何设置页面 |
| 安全中心 | com.miui.securitycenter | 权限管理、清理、拦截全部失效 |
| 桌面 | com.miui.home | 桌面启动器崩溃,卡在黑屏 |
| 电话/短信提供者 | com.android.providers.telephony | 通信功能异常 |
| 应用安装器 | com.android.packageinstaller | 无法安装任何 apk |
| 下载管理器 | com.android.providers.downloads | 系统下载任务全部失败 |
| 云服务/查找设备 | com.miui.cloudservice | 丢失查找、云同步失效 |
| 近场支付组件 | com.miui.tsmclient | NFC 刷卡、门卡模拟失效 |
我建议你在动手前,先把这个表格和自己的包列表对一遍。另外一条经验:分批操作,一次只卸三到五个,然后正常用半天。别一口气卸三十个然后发现某个功能坏了却不知道是哪个包惹的祸。删除前把要卸的包名记在备忘录里,这是你唯一的"后悔药处方"。
3. 从零开始的一次完整精简实操
3.1 连接与设备确认
手机插上电脑,开发者选项里 USB 调试开着,然后在电脑终端里执行:
adb devices正常应该输出类似这样的内容:
List of devices attached a1b2c3d4 device关键是后面那个状态必须是device。如果是unauthorized,说明手机上的授权对话框没处理,或者需要重新插拔;如果是offline,通常是驱动问题或者数据线只供电不传数据;如果列表是空的,那就是线或者 USB 口的问题,换根线、换个口,别在这上面硬耗。
设备确认之后,先看一眼当前这台机器上一共有多少包,心里有个数:
adb shell pm list packages | wc -lWindows 下没有wc,用adb shell pm list packages | find /c "package"也能数出来。我那台机器一上来是四百多个包,属于 MIUI 的正常水平。
3.2 把包名和图标对应起来
这一步是新手最容易卡住的地方——pm list packages吐出来的是一堆com.xxx.yyy,谁知道哪个是谁。我常用的几个方法,从快到慢排一下。
第一种,按关键词过滤。小米系的应用包名很有规律,找视频就是:
adb shell pm list packages | grep videoMac 和 Linux 直接用grep,Windows 的 cmd 里换成findstr:
adb shell pm list packages | findstr video第二种,在网上搜"应用名 + 包名",这个最省事但要注意核对,搜索结果里经常有同名的山寨包名。
第三种,也是我现在最常用的——在手机上装一个能显示包名的应用信息查看工具,直接看图标对应的包名,一目了然,尤其适合那种包名和应用名八竿子打不着的应用。
这里插一句关于免 root 虚拟 hook 相机类需求的事。这类玩法属于另一条技术路径,它依赖的是应用层的运行时环境,跟本文讲的卸载精简目标是两回事。卸载精简关注的是"少装、少跑",而相机增强类是"改行为",前者用命令行就能搞定,后者往往需要更复杂的运行时支持。别把这两件事混在一起规划,容易把自己绕进去。
3.3 执行卸载与结果验证
确认好包名,就可以下手了。假设我要卸掉小米视频,命令是:
adb shell pm uninstall --user 0 com.miui.video成功的话终端会回一个Success。注意这个 Success 只代表卸载指令执行成功,不代表这个包一定被清干净了,因为有些包被其他组件依赖,系统会立刻把它重新拉起。卸完之后回到手机上,应用列表里应该已经看不到它了。再回到终端验证一下:
adb shell pm list packages | grep com.miui.video如果什么都不输出,说明当前用户空间里确实已经没有这个包了。想更彻底地确认,可以看看它到底装在哪个分区:
adb shell pm path com.miui.video卸载成功之后这个命令通常也查不到路径了。
如果你的目的是保留数据、只让它不再出现,加一个参数就行:
adb shell pm uninstall -k --user 0 com.miui.video-k是 keep data 的意思,数据目录留着,恢复回来时登录状态、设置都还在。
3.4 批量处理时怎么写脚本
一个个敲命令太慢,我后来把要卸的包名整理成一个文本文件,一行一个,然后用脚本批量跑。Linux/macOS 下可以这样:
while read pkg; do adb shell pm uninstall --user 0 "$pkg" done < remove_list.txtWindows 下用 PowerShell:
Get-Content remove_list.txt | ForEach-Object { adb shell pm uninstall --user 0 $_ }但我要提醒一句,批量脚本是把双刃剑。一旦列表里混进一个不该卸的包,你会眼睁睁看着它一路 Success 下去,中间没有停顿确认的余地。我的做法是第一次执行时先在脚本里加个echo打印当前正在处理哪个包,确认整份列表没问题之后再撤掉打印,全速跑。另外,脚本执行过程中如果手机弹出任何授权或者系统提示,一定要停下来处理,别让脚本盲跑。
如果哪天想恢复某个应用,命令是:
adb shell cmd package install-existing com.miui.video这条命令会把系统分区里原本的那份重新挂回用户空间,绝大多数情况下立刻就能用。少数应用恢复后需要重新登录或者重新下载资源,属于正常现象。
4. 不想敲命令?图形化方案的选择逻辑
4.1 Shizuku 这条路是给谁准备的
命令行对熟悉技术的朋友不是问题,但我身边更多人希望有个带界面的工具,点几下就完事。这就要提到Shizuku这类方案。它的思路很巧妙:Shizuku 本身是一个通过 ADB 或无线调试启动的后台服务,启动之后,它把 ADB 级别的权限"转接"给支持它的应用,让这些应用在被授权后能以接近 ADB 的能力执行操作。换句话说,你还是免 root,还是走调试接口,只是把敲命令这一步交给了图形界面。
启动方式主要有两种。一种是用电脑配合,通过adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh这样的方式拉起服务;另一种是从 Android 11 开始,利用系统自带的无线调试功能,在手机上自己配对启动,彻底摆脱电脑。后者对普通用户友好太多,我个人更推荐,但要注意无线调试的配对码每次重新配对都会变,别用旧的。
4.2 挑工具的几条判断标准
支持 Shizuku 的卸载类工具不少,选的时候我一般看三点。
第一,是否开源。系统精简工具拿到的是相当高的权限,能列出你手机上所有应用、能执行卸载,来源不明的闭源工具体验再好我也不会用。开源意味着代码可被审查,社区也会盯着它有没有夹带别的东西。
第二,是否有明确的"恢复"入口。一个合格的精简工具必须能让你看到自己卸了哪些包,并且一键恢复。只会卸不会装的应用,删完就让你自己去想,这种设计思路本身就不负责任。
第三,是否强制联网。纯粹依靠本地 ADB 权限干活的工具,理论上不需要联网就能完成卸载。如果一个精简工具要求你必须登录、必须联网才能用,那就得打个问号了。
电脑端也有图形化方案,思路是把 ADB 命令包装成勾选界面,你勾选要卸的应用,它帮你生成并执行命令。这类工具适合懒得写脚本、又想在电脑上批量处理的人。但无论用哪种工具,底层的--user 0机制是一样的,所以本文提到的所有风险和不可删除清单,同样适用。
5. 常见问题与排查实录
5.1 卸载后系统出现异常怎么办
这是最让人心跳加速的场景。表现一般是:桌面反复崩溃、通知栏消失、某个功能点进去直接闪退。第一反应不要慌,也不要急着重启,先把之前记下来的包名找出来。
恢复的顺序我总结成三步。第一步,用install-existing把最近卸载的包先装回来,尤其优先恢复安全中心、系统界面这类核心组件:
adb shell cmd package install-existing com.miui.securitycenter第二步,如果恢复之后还是不正常,重启一次手机。很多异常只是因为某个正在运行的进程还在引用已经卸载的包,重启之后引用关系重建,问题就消失了。第三步,如果重启之后依然进不去桌面或者卡开机,那就进 Recovery 双清或者线刷完整包。听起来吓人,但因为我们的操作从来没动过系统分区,线刷一个原版包就能彻底复原,数据也不一定全丢——前提是你之前开了云同步或者本地备份。
我自己的真实经历是:有次把com.miui.systemAdSolution卸了,结果某些系统页面的广告位是没了,但同时连带影响了另一个页面的布局显示。恢复之后一切正常,这个包现在被我列在"可以卸但要接受副作用"那一档里。
5.2 系统更新之后应用"复活"了
这是非常普遍的现象,也是最容易被误解成"工具失效"的情况。MIUI 的 OTA 更新本质上是一次系统分区覆盖,你之前从用户空间卸掉的包,在更新过程中会被系统重新挂载回来,所以更新完一看,那二十个图标又齐刷刷回来了。
这不是工具的问题,是你需要知道的一个流程特点。应对办法很简单——更新完系统之后,重新跑一遍你的卸载列表就行。所以我一直强调要把包名列成文件保存好,那不是一次性的工作清单,而是一份可以长期复用的配置。我现在手机上就留着这么一份文本,每次大版本更新之后花五分钟重跑一遍,比重新回忆"当时卸了哪些"高效太多。
另外提醒一点,大版本更新之后不要立刻跑批量脚本。新版本里有些包名可能发生变化,有些应用的角色也可能被重新定义。稳妥的做法是更新后先正常用两三天,观察系统行为,再按老列表逐条核对包名是否仍然存在,然后才动手。
5.3 常见问题速查表
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
adb devices列表为空 | 数据线只供电 / 驱动缺失 | 换原装线、换 USB 口、装官方驱动 |
| 状态显示 unauthorized | 手机端授权未确认 | 撤销调试授权后重新插拔确认 |
命令报not found | 包名拼写错误或已卸载 | 先用 list packages 确认包名 |
| 卸载后应用自己回来了 | 被核心组件依赖并重新拉起 | 换用disable-user或接受现状 |
| 系统更新后应用全部恢复 | OTA 覆盖系统分区 | 更新后重跑既有的卸载列表 |
| 桌面崩溃无法操作 | 误删了桌面或系统界面 | 通过 ADB 执行 install-existing 恢复 |
| 恢复后功能仍异常 | 关联账号或配置丢失 | 重新登录账号、重新激活相关服务 |
| 部分应用按钮点不动 | 系统级保护,无法停用 | 改用 ADB 卸载方式处理 |
5.4 几个只有踩过才知道的细节
讲几个文档里不会写、但实际会遇到的细节。
第一个,卸载和应用商店的关系。如果你把应用商店本身卸了,那么后续所有通过商店更新的应用都会停在旧版本,只能手动去官网下 apk 安装。这不是坏事,反而让更新更可控,但你要接受"应用不会自动更新"这个结果。我自己是留着商店但关掉自动更新,两头的好处都占上。
第二个,关于国际版 ROM 的特殊性。前面提到过 NFC 和钱包的联动,这里再强调一次:国际版和国内版的应用构成差异不小,你在国内版上验证过的可删列表,直接搬到国际版上可能翻车。跨版本 ROM 之间不要照抄卸载清单,一定要在自己当前系统上重新列一遍包名。
第三个,别迷信"一键精简脚本"。网上流传的那种"MIUI 一键去广告脚本",往往是针对某个具体版本写的,你的系统版本和机型稍有不同,它可能就在删一些不该删的东西。我见过有人跑完脚本之后,指纹识别直接没了,因为脚本把一个和生物识别相关的组件也扫进去了。想省事可以理解,但至少要把脚本打开读一遍,看它到底在卸哪些包。
6. 我的实际体会与操作建议
折腾到现在,我手机上长期保持在四百出头个包的水平,比出厂少了三十来个,存储空间多出来几个 G,后台自启的条目肉眼可见地变少,待机耗电也有改善。但说实话,最大的收益不是省了那几个 G,而是桌面终于清爽了——这东西对每天要解锁几十次手机的人来说,情绪的正面影响比省电更明显。
如果你打算动手,我最后再给几条个人建议。先从最没有悬念的那几个开始,比如小米画报、游戏中心、用户反馈这类,卸完观察一周,确认没有任何异常再继续下一个批次。每一批都要在备忘录里记下包名,这不是形式主义,是真的救过我好几次。涉及支付、NFC、云服务、账号相关的包,默认不动,除非你有明确的理由并且愿意承担恢复成本。最后,如果某天你发现自己要恢复的应用超过了三个,那大概率说明你精简得有点激进了,适当回退一点,手机这东西,稳定比极致清爽重要得多。