尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

用ADB卸载MIUI预装软件:小米红米系统应用清理指南

用ADB卸载MIUI预装软件:小米红米系统应用清理指南 你有没有遇到过这种情况新买的小米手机或红米手机一开机就自带了一堆“永不用但删不掉”的软件。桌面滑一滑全是各种视频、浏览器、金融、游戏中心有的还不停地给你推送消息。去设置里长按卸载系统提示“这是系统应用无法卸载”。不root不刷机能不能把这些吃内存、耗电、弹广告的预装软件请出去能。用ADB就能做到。这篇文章我把我实际折腾MIUI系统包括小米和红米机型的经验完整写出来从环境配置到具体命令从误删恢复到底线清单尽量一次说透。ADBAndroid Debug Bridge是安卓官方调试工具它能让电脑通过USB或网络与手机通信。普通用户对它印象最深的就是“开发模式”“USB调试”但真正用起来它比想象中强大得多。通过ADB卸载系统预装软件本质是使用pm uninstall --user 0命令以当前用户的身份移除某个应用。这个过程不需要root不需要解锁BL理论上只要是安卓7.0以上的设备都可以操作但不同品牌限制不同。在MIUI上大部分自带的“可卸载系统应用”都能这样移除而且卸载之后不会影响系统正常启动。这也是目前最安全、最“优雅”的清理方案。文章会覆盖下面这些内容为什么手动卸载不掉但ADB可以删MIUI上ADB环境怎么配置驱动和工具哪来完整的卸载步骤和常用的包名清单误删了系统组件怎么快速恢复以及哪些东西绝对不能动。整个过程我都在自己的红米K70和朋友的几台小米机型上验证过方法是可靠的需要的耐心大概在半小时以内。1. 为什么系统自带应用这么“顽固”手动卸载都卸不掉MIUI把应用分成了几个层级。普通安装的第三方应用用户可以在桌面直接卸载数据也一并清掉。但是预装软件属于“系统分区”的应用它们被安装在/system/app或/system/priv-app目录下整个分区是只读的。普通用户模式下这些应用没有提供“卸载”入口就算你用系统自带的应用管理去点“卸载”多数时候也只能“清除数据”或“停用”过一阵子系统更新又把它拉回来了。手动卸载不掉的根本原因在于MIUI把预装软件分成了不可卸载和“可停用”两种策略由系统应用列表配置文件控制。系统设置界面只能操作被系统允许操作的那部分而不是真正删除了对应文件。ADB的pm uninstall则不同。pm uninstall --user 0这个命令的完整含义是向包管理器发送卸载请求但只针对用户ID为0的“主用户”执行卸载操作。这个操作并不会删除/system分区里的APK文件而是为当前用户生成一个“已卸载”的状态标记。效果上应用从桌面消失、不运行、不占用户空间就像被卸载了一样。相比root后直接删掉/system/app里的文件这个方案的风险低很多。你不用动系统分区随时可以用pm install-existing命令把应用恢复回来相当于“官方后悔药”。所以ADB卸载与其说是一种对系统的“破坏”不如说是“用系统自己的机制关掉系统不让你关的应用”。这也是我推荐大家优先尝试这种方案而不是直接去root的原因。root后删除虽然彻底但遇到OTA升级和系统校验时容易出现各种不稳定ADB方案干净、可逆、不破坏系统完整性。2. 动手之前电脑端ADB环境搭建和手机端准备工作ADB本身是安卓开发者工具包的一部分谷歌在SDK Platform Tools里提供官方版本。这里有一个很重要的判断市面上各种“一键ADB工具”“手机助手”虽然集成了ADB但往往捆绑了额外软件或者版本过老。我建议直接用官方Platform Tools一次配置后续所有机型都能用。2.1 电脑端获取ADB工具安装驱动第一步是从Android开发者官网下载SDK Platform Tools压缩包Windows系统下载zip包后解压到一个纯英文路径比如D:\adb。解压完成后目录里能看到adb.exe、fastboot.exe和一堆DLL文件。之所以强调纯英文路径是因为中文路径在某些场景下会导致驱动加载或命令执行异常我踩过这个坑值得提前避掉。将这个目录添加到系统环境变量PATH能让后续操作更顺手不必每次切到adb目录才能运行命令。具体做法是右键“此电脑”-属性-高级系统设置-环境变量在用户变量的Path中新建一条填入D:\adb。配置完成后重新打开命令提示符输入adb version能打印出版本号就说明成功了。第二步是驱动。目前多数小米、红米机型在Win10和Win11下连接后会自动安装MTP驱动设备管理器里能看到“Android Composite ADB Interface”或类似的设备。如果设备管理器里出现黄色感叹号或者adb devices始终识别不到设备就需要去小米官网下载小米USB驱动也可以借助“15 seconds adb installer”这类工具自动装驱动。不过我个人还是倾向官方驱动原因无他兼容性最稳出问题容易排查。2.2 手机端开启开发者选项和USB调试手机上需要进入“设置 - 我的设备 - 全部参数与信息”连续点击“MIUI版本”7次直到提示“已进入开发者模式”。然后回到“设置 - 更多设置 - 开发者选项”打开“USB调试”开关。这里有个细节值得单独拿出来讲MIUI跟别的安卓系统不同开发者选项里有一个“USB调试安全设置”选项必须一并打开否则后续通过ADB执行pm uninstall卸载应用时手机会弹出“允许模拟点击”之类的授权窗口有些命令会直接报Security exception错误。我第一次操作时只开了USB调试结果卸载系统应用时各种受阻后来才发现是这个安全设置的坑。如果你的MIUI版本较新可能还会看到“USB安装”“USB调试安全设置”等选项建议把“USB调试安全设置”打开但“USB安装”可以不开减少风险。连接数据线后手机端会弹窗询问“是否允许USB调试”勾选“始终允许”确认。然后在电脑命令提示符里执行adb devices出现一长串序列号和device状态环境就绪了。这里想多提醒一句建议使用原装数据线或质量可靠的数据线。我遇到过一个很隐蔽的问题某根第三方线只能充电数据通道不通折腾半小时才发现是线的问题。3. 找出预装软件包名MIUI系统应用的识别方法ADB卸载需要用到应用的包名不是你在桌面上看到的“应用名”。比如“小米视频”的包名是com.miui.video“小米音乐”是com.miui.player。那么问题来了怎么把屏幕上的应用图标跟包名对应起来如果你要删除的应用不多可以进入“设置 - 应用设置 - 应用管理”找到目标应用点击进入应用详情滑到最底部就能看到“版本”信息上方的一行包名信息。这个方法虽然直观但效率不高一次卸载十几个应用时太慢了。更高效的办法是直接在ADB里把所有用户应用列出来然后筛选。adb shell pm list packages可以列出所有包名加上-s参数只显示系统应用加上-3参数只显示第三方应用。不过预装软件在MIUI上往往混在系统和第三方之间因为小米把很多预装软件标注为“系统应用”但实际上位于/data分区。最靠谱的方式还是先列出所有应用再结合桌面图标人工核对。adb shell pm list packages会输出一长串package:xxx的格式。输出量很大建议先存到文件里再筛选adb shell pm list packages packages.txt然后打开文本文件用CtrlF搜索关键字比如搜索“miui”、“xiaomi”、“bank”、“video”、“music”能快速缩小范围。还有一个更省事的办法借助包名查看应用。手机上安装“App Inspector”或“当前应用”这类工具打开某个应用工具会显示当前前台应用的包名。这种方式适合临时查一两个应用。但一次性清理时我还是建议用列表方式因为脚本化处理最方便包名信息也是后面写批量卸载脚本的基础。4. 核心操作ADB卸载自带软件的命令与批量脚本4.1 单条卸载命令演示拿到了包名卸载就很简单了。以“小米视频”为例adb shell pm uninstall --user 0 com.miui.video执行后如果反馈Success说明当前用户下这个应用已经被移除。桌面上对应图标消失以后所有地方都不会再出现它。要注意这里的--user 0不能省略。有些教程写的是pm uninstall -k --user 0-k的意思是保留用户数据但卸载系统应用时保留数据没有太多意义反而可能残留一些标志位。我习惯直接不写-k让数据一并清理掉。关于卸载会不会“删掉系统文件”这一点再强调一下这个命令并不会删除系统分区里的APK文件本身只是从当前用户的可视空间移除它。所以重启后不会“复活”但系统更新时某些应用可能会被还原这是MIUI的一个机制后面专门说。4.2 批量卸载脚本一次处理多个应用手动一个个复制粘贴命令显然太低效。我平时是先把要卸载的包名整理到一个文本文件里然后写一个循环脚本一次性执行。Windows下用批处理.batmacOS/Linux下用shell脚本.sh逻辑都一样。这是Windows批处理脚本的写法echo off for /f delims %%i in (uninstall_list.txt) do ( echo [Uninstalling] %%i adb shell pm uninstall --user 0 %%i ) pauseuninstall_list.txt里每行写一个包名例如com.miui.video com.miui.player com.miui.browser com.xiaomi.gamecenter com.miui.notes脚本执行后每个包名的卸载结果都会显示在屏幕上。如果你看到大量Failure [not installed for user 0]说明该应用本来就不在当前用户下没有影响。如果你用的是macOS或Linux对应的shell脚本是这样的#!/bin/bash while read pkg; do echo [Uninstalling] $pkg adb shell pm uninstall --user 0 $pkg done uninstall_list.txt执行前先chmod x uninstall.sh给它执行权限然后./uninstall.sh运行。实测下来的话用批处理脚本批量卸载二十多个应用也就几秒钟的事比手动在手机上一个个“停用”舒服多了。不过提醒一句别把卸载列表搞得太激进。刚开始用ADB那会儿我在网上找了一份“极致精简清单”把看到的所有预装软件全部卸载了一遍结果系统设置里的部分选项消失了负一屏也出了点小毛病。后面恢复起来虽然不难但来回折腾浪费时间。建议保守一点按需卸载。4.3 常见可卸载预装软件参考清单下面是基于MIUI 14和HyperOS澎湃OS环境整理的一份常见预装软件包名清单覆盖绝大多数小米和红米机型。注意不同版本和机型包名有可能不同清单只作参考。软件名称包名说明小米视频com.miui.video在线视频平台可以卸载小米音乐com.miui.player在线音乐平台本地音乐播放器常用介意可保留小米浏览器com.miui.browser系统自带浏览器可替代方案多小米商城com.xiaomi.shop购物应用小米社区com.xiaomi.market注意别跟应用商店混淆应用商店com.xiaomi.market部分机型可卸但卸载后系统更新入口可能受影响建议保留游戏中心com.xiaomi.gamecenter游戏聚合入口广告重灾区小米钱包com.miui.tsmclient涉及NFC刷卡卸载后公交卡模拟等功能可能失效快应用框架com.miui.hybrid快应用运行环境基本用不到智能服务com.miui.systemAdSolutionMIUI广告推荐服务注意别误删系统关键组件内容中心com.miui.contentcatcher负一屏内容推荐MIUI黄页com.miui.yellowpage陌生号码标记和查询卸了不影响通话小米金融com.xiaomi.jr金融应用小米天气com.miui.weather2系统自带天气指南针com.miui.compass系统小工具收音机com.miui.fm部分机型无此应用这里必须强调以上清单里“应用商店”和“小米钱包”需要谨慎。应用商店虽然看起来不是什么核心组件但在MIUI里它承担了部分系统组件更新的职责。有些用户卸载后桌面壁纸更换和系统应用升级出现了异常。个人建议如果空间不紧张应用商店保留。小米钱包涉及NFC功能如果你日常用小米手环、NFC门禁或者公交卡不要卸载它。国际版的小米钱包和国内版包名不同这点也别搞混。5. 误卸后的恢复方法不用刷机就能救回来ADB方案最大的优势就是“后悔成本低”。如果你卸载完发现某个应用其实还要用比如手滑把相册卸了或者把某个系统组件卸了导致设置崩溃不要慌一条命令就能恢复adb shell pm install-existing 包名这条命令会让系统重新为当前用户安装这个应用恢复到卸载前的状态。它同样不需要root不需要重启一般执行后几秒内就能在桌面看到应用图标。举个例子有一次我在一台红米Note 12 Turbo上卸载了小米相册com.miui.gallery结果发现相册不止是用来看图的它还承担了系统壁纸选择的功能。桌面长按“更换壁纸”直接无法打开。我一脸无语然后执行了adb shell pm install-existing com.miui.gallery几秒钟后功能就恢复了整个过程不需要重启。后来我把这个经验也记了下来但凡卸载完发现某个入口功能没了不要慌把最近卸的记录倒着装回去就行。恢复时有两个坑需要注意。第一pm install-existing只能恢复“原本就在系统分区中的应用”如果卸载的是后来自己安装的第三方应用这条命令无效需要重新手动安装APK。第二某些应用有依赖关系。比如你卸载了“智能服务”之后再想恢复它可能会因为相关联的服务也已经被卸载而恢复失败。遇到这种情况先把相关联的应用恢复一下再执行一次pm install-existing。5.1 备份卸载清单给你的“后悔药”上个保险在进行大批量卸载之前我强烈建议先导出一份当前所有用户应用的包名列表存成文本文件。这一份清单就是你的“系统快照”恢复时对照着它逐条安装缺失应用即可。导出命令不复杂adb shell pm list packages all_packages_backup.txt执行完这段先别急着批量卸载。打开这个文件扫一眼里面的包名确认你理解其中大部分条目是干什么的。如果看到某个包名完全不知道是什么建议先搜一下再去决定要不要卸。这一份文件虽然简单但能避免很多不必要的麻烦。同时还可以用下面的命令把所有系统应用的路径导出来万一后续需要手动恢复APK能快速定位adb shell pm path 包名比如adb shell pm path com.miui.gallery会输出类似package:/system/app/MiuiGallery/MiuiGallery.apk的路径这就是系统应用所在的APK位置。6. 实操中常见的坑和排查思路这个方案本身不复杂但实际操作中总有各种意外。我把自己遇到过的高频问题归一下类你遇到类似情况时可以照着排查。6.1 ADB设备状态显示unauthorized刚连接手机时adb devices显示unauthorized说明手机端的USB调试授权弹窗没有在5秒内点确认或者被误点成了拒绝。解决方法手机上进入“开发者选项”找到“撤销USB调试授权”然后重新连接再次弹窗时勾选“始终允许”并确认。如果还是没有弹窗拔掉数据线重新插入或者重启ADB服务。重启ADB服务的命令是adb kill-serveradb start-server6.2 卸载时提示Failure [not installed for user 0]这个提示通常出现在两种场景。一种是你已经卸载过该应用重复执行命令另一种是目标应用是“系统内置但未在当前用户安装”的状态。总之这个提示不是错误跳过即可不会对系统造成影响。6.3 卸载时提示Security exception这几乎是MIUI上最容易踩的坑。前面说过只开“USB调试”不够MIUI还要求开发者选项里的“USB调试安全设置”处于开启状态。这个选项在很多教程里都没被提到导致用户在MIUI 13以上版本执行pm uninstall时报权限错误。把“USB调试安全设置”打开后问题基本就能解决。如果打开后依然报错试着重启一下手机让设置完全生效。6.4 卸载后应用依然出现在桌面有几种可能。第一你卸载的只是某个应用的一个关联组件而不是应用本体。第二桌面有缓存重启手机即可解决。第三之前卸载过但状态没有完全清除可以再执行一次卸载命令。一般重启手机后桌面就能恢复正常状态。6.5 系统更新后应用“复活”MIUI的系统更新包在覆盖安装时偶尔会把部分预装软件重新注册到当前用户下表现为“刚卸的软件又回来了”。这在跨版本大更新时尤为明显。没有一劳永逸的办法只能更新后再执行一次卸载命令。可以把卸载脚本和包名清单保存好更新后跑一遍也就是一两分钟的事。7. 这条红线别碰这几类系统组件卸载会导致问题对我来说判断一个应用能不能卸载看的是“这个应用有没有承担系统关键功能”。有些应用看似没用实际上被系统其他模块调用一旦卸载各种奇奇怪怪的问题就来了。下面这几类组件我的建议是无论如何都别卸。核心系统UI类比如com.android.systemui系统界面卸载后手机界面会完全失效屏幕可能黑屏只能线刷或恢复出厂才能救回来。桌面启动器com.miui.home也一样卸载后看不到桌面。负责系统安装的com.android.packageinstaller也别动否则无法安装任何APK。负责短信和电话的com.android.mms、com.android.phone更不用说了。这些组件的共同点是它们位于系统最底层不满足“可卸载”条件。卸载后虽然可以用pm install-existing恢复但前提是你能恢复一个能操作手机的环境。如果桌面都没了你在电脑上很难操作要是没开启ADB网络调试就是一场灾难。我想特别提醒的是com.miui.systemAdSolution智能服务/广告服务。从这个包名的字面意思看它就是广告推荐模块很多精简教程都把它列在“必删清单”里。但实测下来这个应用在部分MIUI版本上承担了部分系统UI的渲染能力卸载后会出现通知栏卡顿、下拉通知无法展示、甚至桌面崩溃。我自己在K70上试过一次卸载后第二天就发现负一屏无法加载恢复安装之后才正常。所以我现在的建议是可以用ADB给这个应用执行“停用”而不是卸载停用命令是adb shell pm disable-user --user 0 com.miui.systemAdSolution这样效果上和卸载差不多但遇到问题可以用adb shell pm enable com.miui.systemAdSolution快速恢复安全得多。顺带把“冻结”和“卸载”的区别说清楚pm disable-user是停用应用数据还在随时能启用pm uninstall是卸载从当前用户空间移除。对系统应用来说pm uninstall更彻底但pm disable-user更安全。两者各有各的适用场景我觉得如果你只是想少看到几个图标、少收一点推送停用足够如果是为了清理用户空间那就用卸载。8. 一些更高阶的玩法冻结全家桶与投屏到电脑学会了基本的pm uninstall其实你已经掌握了ADB使用中最核心的日常技能。在此基础上还可以做一些延伸操作跟卸载自带软件的目的相辅相成。8.1 用ADB冻结应用不用卸载、直接停用是另一套给手机“减负”的思路。上面提到的pm disable-user就是一个冻结命令尤其适合那些“系统不允许卸载”但你又不想看到的应用。比如某些运营商的定制应用或者某些你真的不确定会不会出问题的系统应用先冻结观察几天没问题再考虑卸载。如果冻结后发现系统异常一条pm enable命令就还原了犹豫成本为零。列出当前所有已经停用的应用可以用adb shell pm list packages -d恢复停用的应用直接用adb shell pm enable 包名。反向操作查看所有已卸载的应用adb shell pm list packages -u带-u参数能看到包括已卸载的所有包8.2 抓取logcat日志排查问题卸载完某个应用后如果系统出现了异常但没有明显报错可以通过adb logcat抓取运行日志定位。比如卸载某个服务后系统设置崩了或某个模块频繁闪退执行adb logcat *:E屏幕上会持续打印当前的错误日志。抓到自己需要的日志后按CtrlC终止。配合adb logcat -c清空旧日志先清空再复现问题抓到的日志更干净。这个操作平时用不太上但真遇到问题排查时手边有ADB环境的话查起来比在手机上瞎猜快太多了。8.3 ADB传文件和管理手机ADB不只是用来卸载应用的。它也能在电脑和手机之间传文件比如把电脑上的APK安装到手机adb install xxx.apk把手机上的文件复制到电脑adb pull /sdcard/Download/xxx.zip D:\backup\把电脑上的文件推送到手机adb push D:\file.zip /sdcard/Download/这几个命令在日常使用中频率很高尤其是备份照片和批量装应用时效率比在手机上一个个操作高很多一并收录在这里。8.4 老款电视盒子和模拟器的延伸思路这个方法实际上并不仅限于手机。家里有一台老的创维电视系统卡顿、预装应用多也是用类似的ADB命令清理的。很多电视盒子和智能电视都内置了ADB调试端口只是默认关闭。在“设置 - 关于”里找“版本号”连续点击进入开发者模式打开“ADB调试”后用adb connect 192.168.x.x:5555连接电视再执行pm uninstall --user 0卸载自带软件跟手机上的逻辑一模一样。夜神模拟器这类安卓模拟器也支持ADB操作。模拟器安装目录里通常自带adb.exe或者可以直接用系统配置的ADB连接模拟器的特定端口然后对模拟器里的预装应用执行同样的命令。很多人用模拟器是用来跑自动化脚本的ADB在这个场景下的应用就更多了比如adb shell input tap x y模拟点击、adb shell screencap截图等等。9. 最后的几点个人建议刷过很多机型也帮朋友处理过各种“手机卡顿”的问题。关于MIUI预装软件清理最后再分享几条个人经验。第一别追求“清零”。系统应用之间有着复杂的依赖关系很多看起来没用的应用其实在设计时就在后台承担了一些职责。我的标准是只卸载自己明确知道“不用”的应用比如我不看小米视频、不用小米商城、不玩游戏中心这些卸载了没有心理负担。但对于那些不熟悉的应用我建议先冻结而不是卸载。第二出问题先恢复再排查。不要想着“再卸一个就好了”。如果你卸完某个应用后出现了异常第一反应应该是恢复最近卸掉的几个应用然后再观察。大多数情况是依赖关系导致的换一个精简方案往往比死磕更有效率。第三清理完预装软件后在“设置 - 应用设置 - 应用管理”里把“显示所有应用”打开看一眼那些还在列表里但你已经不用的第三方应用一并卸载。有时候第三方应用比系统应用更占空间、更耗电。第四把这个方法教给朋友时务必强调底线。我自己曾经帮朋友的手机远程排查结果他告诉我他卸载了“系统桌面”和“电话服务”手机已经卡在开机界面了。虽然最终通过恢复模式清数据救回来了但这个过程很折磨。核心系统组件绝对不要碰这永远是第一原则。MIUI的预装软件清理本身不算什么高深技术但它实实在在改善了我每天用手机的使用体验。少了游戏中心的推送少了应用商店的广告负载轻了续航和流畅度都有明显感知。如果你的手机上也有看着就烦的预装软件动手试一试吧。半小时的操作换来清净的桌面和更顺手的系统这笔账怎么算都划算。
返回列表