ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

免Root精简MIUI内置软件:ADB卸载与还原实战指南

免Root精简MIUI内置软件:ADB卸载与还原实战指南 手机用了半年最让人上火的往往不是卡顿而是那些躺在那儿删不掉的内置软件锁屏画报偷偷换图、文件夹里莫名其妙的推荐、通知栏隔三差五弹个猜你喜欢、设置里点两下又是广告位。点开应用管理想卸载卸载按钮是灰的长按只有停用。想彻底干掉它们传统路子是解锁 BL、刷第三方 Recovery、拿 Root 权限代价是数据清空、保修条款变化、后续 OTA 还要跟各种兼容问题打架。而miui系统精简工具免root删除内置软件这类方案解决的正是这个动作不 Root、不解锁、不刷机仅凭手机自带的多用户机制加一条 ADB 命令把这些内置软件从机主这个身份下摘掉看起来像卸载了实际又留了一条随时能反悔的退路。我自己前后在三台小米/红米设备上折腾过这套流程从最早的一条条手敲命令到后来写成脚本 清单文件中间踩过的坑足够写一篇避雷指南。这篇内容面向想自己动手把 MIUI 收拾干净的人你不需要懂 Android 源码只要能照着敲几条命令、能分清哪些包碰不得就能拿到一个安静不少的系统。下面从原理讲起一路讲到清单、脚本、抢救方案和 OTA 之后的维护习惯尽量让你第一次动手就不翻车。1. 免root精简的底层逻辑与方案选型在敲命令之前得先搞清楚免 Root 卸载到底动了系统的哪一块。很多人第一次用pm uninstall --user 0会心里发毛觉得没 Root 怎么可能真卸载是不是骗人的。其实它确实没有真卸载但它解决了你 95% 的痛点而代价低得多。1.1 卸载、停用、清数据三个动作别混着用系统内置软件的安装位置分两种一种是/system、/system_ext、/product这类只读分区里的预装包另一种是用户从应用商店装的、躺在/data/app里的普通应用。真正意义上的物理删除指的是把 APK 从只读分区里抹掉这个动作必须把分区重新挂载成可写也就是必须 Root。免 Root 方案做不到这一步。那它做的是什么呢Android 的包管理服务PackageManagerService里每个应用都有一份安装记录这份记录是按用户区分的。手机出厂时默认只有一个机主用户编号是 0。pm uninstall --user 0 com.xxx的含义是把 com.xxx 这个包在 user 0 名下的安装记录标记为已卸载状态同时清掉它的数据目录。结果就是你在这个手机上再也看不见它、它也拿不到开机自启和后台运行的机会但 APK 文件还在只读分区里躺着随时可以恢复。跟它对应的还有两个动作适用场景完全不同停用pm disable-user --user 0应用还在图标可能还占着位置部分 ROM 会隐藏但进程起不来、组件不响应、广播收不到。可逆性最好一条pm enable就回来了。清数据pm clear --user 0不卸载也不停用只是把它的数据、缓存、登录态清空。适合那些你想留着但现在状态已经脏掉的应用。动作命令可逆性是否清数据典型用途免 Root 卸载pm uninstall --user 0 包名好可整包还原是确定不要的广告类、工具类停用pm disable-user --user 0 包名极好一条命令恢复否拿不准要不要时的观察期启用pm enable 包名-否撤销停用清数据pm clear --user 0 包名不可逆数据没了是应用状态异常、想重置登录我的习惯是任何包先停用用一周确认没有任何副作用之后再改成卸载。这一周里如果出现相机报错、通知收不到、设置项闪退直接pm enable就能回滚不用去翻恢复方案。这个习惯帮我至少躲过三次删完才发现某个功能依赖它的事故。1.2 user 0 机制为什么能绕开 Root 校验这里要展开说一句因为理解了这一层你就知道什么情况下会翻车。Android 从 4.2 开始引入多用户模型一台设备可以有多个人格pm list users就能看到通常是 user 0机主加一个访客。系统分区的挂载是只读的这个属性由内核和分区表决定任何人改不了但每个用户的应用可见性列表是可写的存在/data/system下的相关文件里。免 Root 卸载改的就是这份可见性列表它属于用户数据范畴普通 ADB 权限shell 用户本来就有权写入。这也解释了另外几个容易困惑的现象第一为什么重装 APK 能救回来。因为 APK 本体还在cmd package install-existing做的事情就是重新给这个已有包在 user 0 下建一条记录不需要下载、不需要联网一两秒就完事。第二为什么腾出来的空间没有想象中多。因为只读分区里那几百 MB 的 APK 一个字节都没少你释放的是这个应用在/data下的数据、缓存以及后续更新版本的体积。所以如果目标是省空间这条路效果有限如果目标是省内存、省电、去广告、减少后台唤醒效果非常明显。第三为什么会话与账号是隔离的。你在 user 0 卸载了某个应用切到访客用户它还在那儿因为访客用户有自己的可见性列表。所以做多用户管理的设备要记得对每个用户分别处理。注意有些机型在开发者选项里能开多用户一旦你创建过第二个用户卸载操作务必带上--user 0否则默认操作的不是机主身份行为会跟你预期不符。1.3 哪些人适合自己动手哪些人建议绕道客观说这套方案不是零门槛。它要求你能装个 ADB 工具、能在命令行里复制粘贴、能看懂包名并且愿意在出问题时自己花二十分钟排查。如果你符合下面这几条自己动手完全没问题手上是小米/红米/POCO系统版本在 Android 8 以上cmd package install-existing从 Android 8.0 开始提供能接受系统看起来变干净但个别设置项可能消失这种程度的副作用愿意在动手前导出一次应用清单、留一份还原用的文件。反过来说如果你完全不想碰命令行、手机里存着唯一一份重要数据且没有备份、或者设备是通过公司统一管理的我建议先别动。另外要说清楚一点免 Root 卸载不涉及系统分区写操作不影响硬件本身但一旦出错进了无限重启兜底手段是恢复出厂设置那会清空你的数据。所以提前备份这四个字不是客套话是这套流程里唯一不可省略的步骤。2. 动手前的环境准备与保命清单导出准备工作其实只有三件事PC 端能连上手机、手机端把调试开关打开、导出当前所有包的清单。前两件十分钟能搞定第三件是很多人嫌麻烦跳过、然后在还原环节追悔莫及的一步。2.1 PC 端 ADB 环境只认官方来源ADB 全称 Android Debug Bridge是 Google 官方平台工具里的一部分。抓包、刷机、调试、卸载系统应用用的都是它。安装方式很朴素去 Android 开发者官网的平台工具页面下载对应系统的压缩包别去各种软件下载站那些二次打包过的安装器经常捆东西Windows 解压到C:\platform-tools这种不含空格和中文的路径然后把该目录加进系统环境变量PathmacOS 直接解压后把目录加进~/.zshrc的 PATH或者用包管理器装Linux 用发行版包管理器装android-tools或adb即可。装完在终端里验一下adb version adb kill-server adb start-serveradb kill-server再start-server这两步看着多余实际能解决一大半设备识别不到的问题。因为很多手机助手、模拟器会在后台常驻一个 ADB 服务占着 5037 端口导致你的新设备死活连不上。杀掉重启问题就没了。然后是连接测试手机连上 USBadb devices正常输出应该是设备序列号后面跟着device。如果显示unauthorized说明手机上没点授权弹窗解锁屏幕重新插一次就行如果列表是空的往下看换了三根线都不行先怀疑线。很多 USB 线只有充电芯没有数据芯插上去手机能充电但电脑完全没反应。找一根原装或带数据传输的线。Windows 上显示未知设备装一下小米官方的 Windows 驱动包或者通用 ADB 驱动。能识别但一直 unauthorized进开发者选项把 USB 调试关掉再打开然后adb kill-server重来。2.2 手机端开发者选项和 MIUI 的几个特殊开关MIUI 开放调试开关的路径和原版 Android 略有差异进入「设置 → 我的设备 → 全部参数与信息」连续点击「MIUI 版本」七次左右屏幕会提示您已处于开发者模式。然后回「设置 → 更多设置 → 开发者选项」打开「USB 调试」。这里有几个 MIUI 特有的坑我按遇到频率排个序部分版本要求插 SIM 卡并登录小米账号才能开启 USB 调试。这是厂商的防盗刷机制不是 bug照做就行。「USB 调试安全设置」这个开关不开的话pm uninstall这类需要更高权限的操作会被拒绝报SecurityException或直接提示权限不足。如果你的命令全部失败先回来把这个开关打开。「USB 安装」开关和本次操作关系不大不用开。别去关「MIUI 优化」。网上有教程说关了它 ADB 权限更顺实测没必要而且关掉之后会带来通知延迟、权限管理异常、部分应用闪退等一连串副作用。除非你有明确的特殊需求否则保持开启。另外动手前建议把「设置 → 应用设置 → 应用管理」里的列表截图存一份尤其是你打算处理的那些应用。因为卸载之后部分应用会从应用管理里彻底消失你连它叫什么名字都查不到只能靠包名还原。2.3 三条保命命令导出完整包清单这一步是整套流程里性价比最高的动作花三分钟能救你整晚。# 系统预装应用system 分区里的包 adb shell pm list packages -s system_apps_before.txt # 第三方应用 adb shell pm list packages -3 user_apps_before.txt # 当前处于停用状态的应用 adb shell pm list packages -d disabled_before.txt # 包含已卸载记录的应用关键 adb shell pm list packages -u all_with_uninstalled.txt再加一条更细的把 APK 的物理路径也带上方便你判断某个包到底住在哪个分区adb shell pm list packages -f -s system_apps_with_path.txtWindows 用户把grep换成findstradb shell pm list packages | findstr miui adb shell pm list packages | findstr xiaomi导出的这几个 txt 文件请放到一个固定的文件夹里最好再丢进网盘或 Git 仓库。理由很直白当你手滑删错了某个包唯一能告诉你它原来叫什么、要不要装回去的东西就是这份清单。我第二次折腾的时候就是因为没留清单对着黑屏的桌面猜了半天究竟是哪个包的问题。提示pm list packages -u会列出曾经装过但当前已卸载的包。如果你在动手前跑一次会发现有些包出厂时就处于卸载状态它们属于正常的厂商预置保留项不要误以为是残留垃圾去处理。3. MIUI 内置软件的风险分级与精简清单这是全文最容易被抄错的部分。网上一搜MIUI 精简清单能搜到几十份不同的版本有的来自很老的 MIUI 版本有的来自国际版 ROM直接照搬到你的机器上大概率出事。原因很简单包名会随 ROM 版本、地区版本、机型定制而变。所以下面我给的不只是清单更重要的是分级逻辑和你自己的核验方法。3.1 第一梯队广告、统计、推广类风险最低这一梯队的共同特征是不提供任何用户主动使用的功能纯粹是后台服务删掉之后最直观的感受就是世界安静了。常见包名如下以国内版为例包名作用删除影响com.miui.systemAdSolution系统广告解决方案负责各处的推荐位设置、文件夹、安装器里的推荐位消失com.miui.analytics使用数据统计上报无可见影响com.miui.msa.global国际版的系统广告服务MSA广告位消失com.miui.daemon部分机型上的统计/日志守护进程一般无影响个别版本影响电量统计com.miui.bugreport用户反馈与日志抓取反馈入口消失不影响系统运行com.miui.android.fashiongallery锁屏画报会联网换壁纸锁屏不再自动换图com.miui.mipub部分版本的广告分发组件广告位消失实测下来处理掉com.miui.systemAdSolution和com.miui.analytics这两个之后日常能感知到的推荐、弹窗会少一大截。这里有个细节值得说很多广告能力并不是由一个包独扛而是多个组件协作所以你删了一个之后发现广告还在别急着骂方案没用把pm list packages | grep -E ad|msa|analytics|mipub跑一遍看看还剩哪些。3.2 第二梯队独立功能应用按需处理这一梯队是能删但要想清楚的部分。它们大多数有独立入口、有真实功能删了不影响系统启动但可能影响你的使用习惯或者某些联动。包名应用建议需要注意com.xiaomi.market小米应用商店可删系统内置应用的更新通道会断掉如果你用 Google Play不受影响com.xiaomi.gamecenter游戏中心可删无com.miui.player音乐可删无com.miui.video/com.miui.videoplayer视频可删移除后部分视频文件默认打开方式要重设com.android.browser系统浏览器谨慎先装好第三方浏览器再删否则某些应用内跳转的网页打不开com.miui.notes便签谨慎先导出数据删了记录一起没com.miui.weather2天气谨慎桌面天气小组件会失效com.miui.voiceassist小爱同学谨慎语音唤醒、设置里的相关入口一并消失com.miui.huanji换机可删以后再想换机就装第三方工具com.miui.screenrecorder屏幕录制可删有第三方替代com.miui.compass/com.miui.calculator指南针 / 计算器可删建议先留一个替代品com.xiaomi.vipaccount小米社区可删无com.miui.hybrid/com.miui.hybrid.accessory快应用框架可删依赖快应用的小程序入口会失效com.miui.newhome信息助手负一屏可删注意部分机型的负一屏与桌面是同一进程删之前先确认com.miui.gallery相册强烈不建议相机预览、截图、锁屏壁纸都依赖它删了会连锁出问题com.miui.securitycenter安全中心禁删权限弹窗、清理、省电策略都归它管com.miui.powerkeeper电量和性能禁删后台限制、省电模式全在这里这张表里我特意把相册和安全中心放进来了因为它们在很多网上流传的激进清单里被标成可删结果一批人删完发现相机黑屏、装应用时没有权限弹窗只能恢复出厂。3.3 第三梯队系统服务与 NFC、钱包相关别碰这一梯队我不给删除建议只给约束条件因为它们的共同点是删了以后系统还能开机但某些你以为无关的功能会静默失效而且失效表现和原因之间的关联非常难猜。绝对不能删的保命包删了大概率影响开机或基本可用性com.android.systemui—— 状态栏、通知栏、锁屏。删了直接黑屏。com.android.settings—— 设置应用本身。com.miui.home—— 桌面启动器。删了你连应用抽屉都进不去。com.android.phone/com.android.providers.telephony—— 通话与短信基础服务。com.android.providers.settings/com.android.providers.media/com.android.providers.contacts—— 各类数据提供者删了会导致系统服务连环崩溃。com.android.packageinstaller/com.miui.packageinstaller—— 安装器。删了无法安装任何 APK。com.xiaomi.xmsf—— 推送与账号体系依赖它。删了通知推送、账号登录都可能异常。com.xiaomi.finddevice—— 查找设备。删了等于主动放弃防盗能力不建议。com.android.nfc—— NFC 服务本体。NFC 与钱包这一块的取舍单独拎出来说。国内外 ROM 在这块的包名和依赖关系差异比较明显国内版通常有com.miui.tsmclient负责卡模拟、交通卡和钱包相关的几个包国际版则往往是另一套组合。如果你的日常是刷公交、刷门禁、用手机当车钥匙那这几个包一个都别动删掉之后 NFC 开关可能还亮着但卡模拟功能会直接报错表现是能开不能刷而且报错信息通常语焉不详。反过来如果你从来不用 NFC把这些包停用确实能减少后台唤醒这部分收益是真实的。3.4 怎么核验你自己的机器上的包名上面所有包名都可能有出入所以核验方法比清单本身更重要。三条命令足够# 1. 按关键词模糊查 adb shell pm list packages | grep -i miui adb shell pm list packages | grep -i xiaomi # 2. 查某个包的具体信息包括版本和安装路径 adb shell dumpsys package com.miui.systemAdSolution | head -n 30 # 3. 查这个包被谁依赖 / 提供了哪些组件判断它是不是纯服务包 adb shell dumpsys package com.miui.systemAdSolution | grep -A 20 Activity Resolver Table第三条命令是我的私货。一个包如果只有 Service 和 Receiver、几乎没有 Activity那它大概率是纯后台服务删除风险低如果一个包里挂着大量 Activity 和 ContentProvider说明它被别的应用直接调用删起来就要格外小心。这个判断方法比背清单靠谱得多。注意所有清单里的包名请用pm list packages在你自己机器上核对一遍再执行。直接复制网上的清单批处理是这套流程里最常见的翻车姿势没有之一。4. 两条实操路线PC 有线与手机本地免线搞清楚清单之后就可以动手了。有两种走法一是最经典的 PC 连 USB稳定、可控、适合批量二是把 ADB 搬到手机上本地执行不用电脑适合只想顺手清几个应用的人。4.1 路线 APC ADB一步一步来先做一个最小验证确认权限到位adb devices adb shell pm list users第二条会输出类似UserInfo{0:机主:13} running的内容确认 user 0 存在。然后拿一个最不重要的广告包试水先用停用adb shell pm disable-user --user 0 com.miui.systemAdSolution正常返回Package com.miui.systemAdSolution new state: disabled-user。如果返回SecurityException或者Permission Denial回去打开「USB 调试安全设置」。观察一周没问题再改成卸载adb shell pm uninstall --user 0 com.miui.systemAdSolution成功返回Success。常见的失败信息我列一下方便你对号入座返回信息含义处理Success成功-Failure [not installed for 0]该包在 user 0 下本来就不可见无需处理或说明你之前已处理过Failure [DELETE_FAILED_INTERNAL_ERROR]包受保护或路径异常检查是否为关键系统包Permission Denial权限不足打开 USB 调试安全设置必要时 PC 端重启 ADB 服务Unknown package包名写错或该版本没有这个包用pm list packages重新核对再说一个效率上的小技巧MIUI 里有些包是成对出现的比如某个应用和它的服务组件。删主包之前先pm list packages | grep 关键词前缀看看有没有配套包一起处理掉才干净否则可能留下一个没有任何界面、但照样在后台跑的孤儿服务。4.2 路线 B手机本地调试不插线也能做Android 11 之后系统自带了「无线调试」功能位置在开发者选项里。它的本质是把 ADB 服务监听在一个本地端口上PC 可以连手机上的应用也能连。第一次配对需要一个配对码这是系统为了防止本地端口被滥用加的保护。PC 侧的流程是这样# 手机上打开「无线调试」点「使用配对码配对设备」会显示 IP:端口 和六位配对码 adb pair 192.168.1.100:37891 # 按提示输入六位配对码成功后再连接调试端口不是配对端口 adb connect 192.168.1.100:40501 adb devices这里有两个高频坑配对端口和连接端口不是同一个界面上会分别显示很多人只记住一个然后一直连不上以及手机重启后无线调试端口会变需要重新配对。所以这条路适合临时用不适合当作长期方案。如果你想彻底摆脱电脑可以让一个具备 ADB 权限代理能力的工具在设备上跑起来由它把 ADB 级别的权限转交给支持该接口的应用。设备上再配一个支持这种权限代理的包管理类应用就能在图形界面里点选卸载。这类方案的好处是不用记命令坏处是界面里的删除动作通常直接调用卸载接口缺少停用观察期这个缓冲所以用图形界面时更要严格先看清单再点。另外把 ADB 权限交给第三方应用本身就是一次信任决策来源不明的应用不要给这个权限一旦它拿去做别的操作你很难察觉。至于那些以一键免 Root 精简XX 下载免 Root为名的第三方工具和脚本我的建议很明确把它当成清单参考不要把它当成执行器。因为它的包名清单未必匹配你的机型而且外面的可执行文件你无法审计风险收益完全不成比例。4.3 批量执行脚本一次写好反复受益当你要处理二三十个包时逐条敲命令就是自虐了。写个小脚本把清单放一个文件里一行一个包名用#开头当注释。#!/usr/bin/env bash # miui_clean.sh —— MIUI 免 Root 批量处理脚本 # 用法: ./miui_clean.sh uninstall list.txt # ./miui_clean.sh disable list.txt # ./miui_clean.sh restore list.txt # ./miui_clean.sh enable list.txt set -u CMD${1:-uninstall} LIST${2:-list.txt} STAMP$(date %Y%m%d_%H%M%S) LOGmiui_${CMD}_${STAMP}.log case $CMD in uninstall) ADB_CMDpm uninstall --user 0 ;; disable) ADB_CMDpm disable-user --user 0 ;; restore) ADB_CMDcmd package install-existing --user 0 ;; enable) ADB_CMDpm enable ;; *) echo 未知动作: $CMD; exit 1 ;; esac while IFS read -r pkg || [ -n $pkg ]; do pkg${pkg%$\r} # 兼容 Windows 换行 case $pkg in |\#*) continue ;; esac # 跳过空行与注释 out$(adb shell $ADB_CMD $pkg 21 | tr -d \r) printf %-44s %s\n $pkg $out | tee -a $LOG sleep 0.3 # 给系统一点缓冲时间 done $LIST echo 完成日志已写入 $LOG Windows 上用 PowerShell 或者干脆用 Python 版更省事# miui_clean.py —— Windows 友好的批量处理脚本 import subprocess, sys, time from datetime import datetime from pathlib import Path ACTIONS { uninstall: pm uninstall --user 0, disable: pm disable-user --user 0, restore: cmd package install-existing --user 0, enable: pm enable, } action sys.argv[1] if len(sys.argv) 1 else uninstall listfile Path(sys.argv[2] if len(sys.argv) 2 else list.txt) command ACTIONS[action] logfile fmiui_{action}_{datetime.now():%Y%m%d_%H%M%S}.log for line in listfile.read_text(encodingutf-8).splitlines(): pkg line.strip() if not pkg or pkg.startswith(#): continue r subprocess.run([adb, shell, *command.split(), pkg], capture_outputTrue, textTrue) msg (r.stdout r.stderr).strip() print(f{pkg:44} {msg}) with open(logfile, a, encodingutf-8) as f: f.write(f{pkg}\t{msg}\n) time.sleep(0.3)脚本里那个sleep 0.3不是玄学。我最早一批脚本没加延迟连着处理几十个包时偶尔会出现后面几条返回Failure加了延迟之后就没再复现。慢一点稳很多。提示日志文件一定要留着。它是你以后还原的唯一依据也是排查到底哪个包删出了问题的线索。我现在的做法是每次操作都提交到本地 Git 仓库时间、机型、ROM 版本、包名、返回结果全在里面换机之后直接照抄。5. 出问题怎么办还原、抢救与排查实录即便准备得再充分也总会有那么一两次手滑。这一节是我踩过的坑的合集按严重程度从轻到重排列。5.1 单包还原三个命令解决大部分问题先判断你当初做的动作是什么。如果当初是停用adb shell pm enable com.xxx如果当初是卸载adb shell cmd package install-existing --user 0 com.xxxAndroid 8.0/8.1 上这个子命令可能存在差异可以退回用adb shell pm install-existing --user 0 com.xxx成功的返回通常是Package com.xxx installed for user: 0。如果提示Failure [not installed for 0]一般意味着它当前是可见状态本来就不需要还原。有个前提必须说清楚install-existing只能还原APK 还在只读分区、只是 user 0 记录被删的应用。如果这个包在后续的系统更新中被厂商移除了或者你当初用的不是--user 0而是别的方式删掉了文件本体那就还原不回来只能重新刷机或者找对应的 APK 手动安装。所以只要用--user 0这一种方式你就始终留着后路。5.2 从桌面少个图标到无限重启的抢救顺序我把故障按严重度分成四档处理方式完全不同。第一档功能异常但系统能进。比如相机打不开、通知收不到、某个设置页闪退。处理办法是打开刚才的操作日志按时间倒序回忆最近处理了哪几个包逐个install-existing还原每还原一个重启一次验证。这个方法笨但可靠一般还原两三个就能定位。第二档桌面能进但设置或某个系统应用打不开。说明你删了被引用的组件但系统框架还在。这时候 ADB 通常仍然可用直接用命令行还原即可。如果连 ADB 都连不上试着进安全模式关机状态下按住电源键开机出现品牌 LOGO 时按住音量减键不放进入安全模式后系统会禁用非预装应用有时候能把状态拉回来。第三档开机后黑屏或者卡在 LOGO 循环。这时候先别慌试着连接 ADB很多时候系统服务崩了但 ADB 守护进程还活着adb devices adb shell cmd package install-existing --user 0 com.android.systemui adb shell cmd package install-existing --user 0 com.android.settings如果 ADB 也连不上进入 Recovery关机后按住电源键 音量加键选择清除数据恢复出厂。这一步会清空所有数据所以我在开头反复强调备份。第四档解锁了 BL 或者动了分区的。那属于另一套流程不在本文讨论范围。我个人的态度是只是为了清净一点而去解锁收益和风险完全不成比例。5.3 常见现象速查表现象最可能的原因处理方式桌面空白、图标全没删了com.miui.home或桌面依赖组件install-existing还原桌面包无法安装任何 APK删了安装器packageinstaller还原com.miui.packageinstaller/com.android.packageinstaller应用申请权限时没有弹窗删了安全中心相关组件还原com.miui.securitycenter相机黑屏 / 截图失败删了相册相关包还原com.miui.galleryNFC 开关能开但刷不了删了 NFC 卡模拟或钱包组件还原com.miui.tsmclient及钱包包微信、邮件通知不推送删了推送服务还原com.xiaomi.xmsf设置里某些页面闪退删了被设置引用的组件从日志倒推还原状态栏、通知栏消失删了com.android.systemui立即还原必要时 Recovery无限重启删了核心 provider 或 framework 组件先试 ADB 还原不行就恢复出厂电量统计不准、后台被杀删了电源管理相关包还原com.miui.powerkeeper这张表里最大的经验是症状和原因往往隔了一层不要凭直觉猜要看日志。我见过有人因为通知不弹把安全中心还原了三遍实际是推送服务被删了。6. 系统升级、OTA 与长期维护的实战心得处理完之后不是一劳永逸系统会升级包会变你的清单也要跟着走。这一节讲讲怎么把这件事变成一件低成本的日常。6.1 为什么系统升级之后有些软件又回来了具体行为跟 ROM 版本有关但大方向是这样user 0 的卸载记录存放在用户数据分区增量 OTA 一般会保留这些记录所以升级完你发现广告服务还是没回来这是正常的好消息。而全量包升级、线刷、恢复出厂这三类操作会重建用户数据卸载记录自然就清空了所有应用原样回归。还有一种情况比较隐蔽某个包在升级后被厂商改了包名或者被合并到另一个包里。这时候你原来的清单里那条记录就失效了新包名对应的应用重新出现而你以为自己已经处理过了。我遇到过两次都是系统级服务在版本迭代中改了命名。6.2 一份可以长期复用的维护流程我现在的做法是维护两个文件放在同一个目录keep_clean.txt确定要长期保持卸载状态的包名清单restore_list.txt出问题时优先还原的包名清单。每次系统升级后按这个顺序走一遍adb shell pm list packages -u看看当前有哪些是卸载状态跟keep_clean.txt比对找出漏网的重新跑一遍脚本的停用动作观察三天确认无异常后改成卸载把日志提交到 Git备注上机型和 ROM 版本号。这个流程跑下来一次大概十分钟。听起来麻烦但比每次升级后被广告糊一脸要划算得多。6.3 几条用血换来的实操经验第一条别贪心。我第一轮就删了四十多个包结果出了三个问题要排查交叉验证花了整整一晚。后来改成每轮只处理五到八个出问题时范围清晰五分钟就能定位。如果你现在正拿着一份五十个包的清单准备一把梭我建议你先砍到十个。第二条区分我不用和系统不用。这是最容易犯的错。你觉得自己从不看视频应用删了没关系——但如果系统的相册、投屏、文件管理里藏着跳转到它的入口那些地方就会出现点了没反应或者直接闪退。停用观察期就是专门为此设计的停用状态下应用还在、入口还有你能完整体验如果它消失了会怎样。第三条广告少了不代表网络请求少了。系统级的统计、账号、云同步是另一套体系跟广告包在架构上没有直接关系。想彻底降低后台流量和唤醒得从「省电与电池」里的后台限制、自启动管理入手那是另一套方法论和本文的卸载操作是互补关系不是替代关系。第四条那些依赖系统框架的模块要提前想清楚。现在有一类不需要 Root、通过虚拟化方式在应用内运行的模块方案它们之所以能工作靠的是对系统服务的调用以及应用自身声明的权限和组件。当你把某些系统服务包卸载或者停用之后这些模块很可能会出现授权失败服务未响应这类看起来毫不相关的报错。所以如果你正在用这类方案精简前最好单独记录一下它们依赖了哪些系统组件避免删完之后花大量时间去排查一个其实是你自己造成的故障。第五条留一台能救急的电脑和一根靠谱的线。这话听着像废话但我见过太多人在外边用别人的充电线折腾连不上就怀疑手机坏了。备一根确定能传数据的线成本不到二十块能省掉一晚上的焦虑。第六条还原永远优先于重装。遇到问题的第一反应应该是install-existing而不是去网上找 APK 手动安装。手动装的版本可能和系统版本不匹配反而引入新问题而且它会占掉/data空间下次系统更新还会冲突。第七条记录比记忆可靠。我现在的日志文件里除了包名和返回结果还会写一句删这个是为了什么——比如删它是因为锁屏推荐位。三个月后你完全不记得当初为什么删某个包但日志会告诉你。最后分享一个我一直在用的小技巧把所有命令整理成一个 shell 别名或者干脆做成一个带菜单的脚本开机连上 USB 之后输入一个短命令就能跑完整套流程。比如把adb shell pm list packages | grep -i miui缩成miui-pkg用起来顺手很多。折腾这类事情降低每次操作的成本比一次做得有多彻底更重要——毕竟系统会升级包会变而你的清单和脚本是可以一直用下去的。至于那些本来打算靠卸载内置软件换来更大内部存储空间的朋友还是要说一句这条路节省的主要是运行内存和后台唤醒真正占地方的只读分区文件一直都在。想让存储空间松快把相册里的视频、微信的缓存、下载目录里的安装包清一清效果会比删二十个内置应用更明显。两边一起做才算把手机真正收拾利索了。
返回列表