小米电视4A(Android 6.0.1)pm uninstall --user 0 卸载与恢复完整复盘.md
小米电视4A(Android 6.0.1)系统精简踩坑与恢复完整复盘
一、故障概述
| 项目 | 内容 |
|---|---|
| 设备 | 小米电视4A,Android 6.0.1(API 23),无 root |
| 操作 | 用 pm uninstall --user 0 卸载小米预装包做瘦身 |
| 触发包 | com.xiaomi.mitv.mediaexplorer com.xiaomi.mitv.service |
| 症状 | 桌面、第三方APP、播放、遥控器正常;系统设置打开闪退;USB ADB 仍可用 |
| 最终结果 | 恢复两个包后设置完全正常,问题闭环 |
二、根因拆解
2.1 第一层:mediaexplorer 是 Settings 的硬依赖
com.xiaomi.mitv.mediaexplorer 不是普通文件浏览器,而是小米定制 Settings 内部依赖的组件——设置里的存储、U盘访问、文件选择弹窗都会调用它的服务。该包在 user 0 被卸载后,Settings 启动时绑定服务失败,直接崩溃闪退。
2.2 第二层:mitv.service 是更底层的系统服务依赖
mitv.service(小米电视服务)负责输入源管理、通用设置底层接口、设备状态等核心功能。卸载它之后:
- “账号与安全”页面仍能打开(不依赖此服务)
- “通用设置”“输入源”页面无法打开(依赖
mitv.service提供的接口)
所以设置闪退不是单一包造成的,而是多个依赖链断裂的叠加结果。只恢复 mediaexplorer 只能让设置首页打开,恢复 mitv.service 后通用设置和输入源才恢复正常。
2.3 第三层:Android 6 缺少恢复命令 + 小米 priv-app/vendor 权限限制
- **Android 6.0.1 没有
pm install-existing**(该命令 Android 7.0 才新增),不能用它把包重新注册回user 0。 - 包位于
/system/vendor/app(不是常见的/system/priv-app或/system/app),小米固件对这类系统应用的重新注册做了权限收紧,普通adb shell(uid=2000)执行pm enable会报SecurityException: Permission Denial。 am start拉不起来:mediaexplorer没有对外暴露的 MainActivity,它只作为后台服务给 Settings 调用,手动启动必然报 Activity 不存在。
三、恢复过程与关键命令
恢复的一大前提是我此前安装了原生的android setting、还可以双口USB线有线adb,不至于全瞎。
3.1 恢复 mediaexplorer(解决设置首页闪退)
Step 1:定位 APK 真实路径
1 | # 先查常见目录,再全盘 find |
实际路径:/system/vendor/app/MiTVMediaExplorer/MiTVMediaExplorer.apk
Step 2:复制到可写临时目录
1 | adb shell cp /system/vendor/app/MiTVMediaExplorer/MiTVMediaExplorer.apk /data/local/tmp/mediaexplorer.apk |
Step 3:拉取到电脑并用 adb install 安装,显式指定 --user 0
1 | adb pull /data/local/tmp/mediaexplorer.apk ./mediaexplorer.apk |
Step 4:验证注册成功
1 | adb shell pm list packages --user 0 | grep mediaexplorer |
此时设置首页能打开了,但“通用设置”“输入源”仍然打不开——继续排查。
3.2 恢复 mitv.service(解决通用设置/输入源打不开)
Step 1:直接验证确定路径
1 | adb shell ls -l /system/app/TvService/TvService.apk |
(find 因权限中断无结果,但社区资料确认路径就是 /system/app/TvService/TvService.apk)
Step 2:复制 + 拉取 + 安装
1 | adb shell cp /system/app/TvService/TvService.apk /data/local/tmp/mitv.service.apk |
Step 3:验证
1 | adb shell pm list packages --user 0 | grep mitv.service |
结果:设置完全恢复正常,通用设置、输入源均可打开。
四、关键踩坑点记录
❌ 坑1:pm install 后面跟包名
1 | # 错误:返回 INSTALL_FAILED_INVALID_URI |
pm install 后面必须跟 APK 文件的绝对路径,不能跟包名。跟包名会被当作不存在的文件路径解析,返回 INSTALL_FAILED_INVALID_URI。
❌ 坑2:adb shell pm install 返回 Success 但包查不到
1 | # 返回 Success,但 pm list packages 查不到 |
Success 是假阳性。设备本地 pm install 在 shell 上下文里可能只完成了安装会话,**没有把包注册到 user 0**。
✅ 正确做法:用 adb install 并显式加 --user 0
1 | adb install -r -d --user 0 ./mediaexplorer.apk |
这是整个恢复过程中最关键的一条教训。
❌ 坑3:find 因权限中断无结果
1 | adb shell find /system -iname "*TvService*" 2>/dev/null |
无 root shell 在 /system 下遍历时会遇到大量 Permission denied,find 可能提前中断。改用 ls -l 直接验证确定路径更可靠。
❌ 坑4:以为 mediaexplorer 是唯一依赖
恢复 mediaexplorer 后设置首页能开,但“通用设置”“输入源”仍打不开。说明依赖链是多层的,mitv.service 是另一条独立依赖线。
❌ 坑5:pm enable 报 SecurityException
1 | adb shell pm enable com.xiaomi.mitv.mediaexplorer |
普通 adb shell(uid=2000)没有权限修改 vendor/priv-app 系统应用的启用状态。这条路在无 root 下走不通。
❌ 坑6:am start 拉起 mediaexplorer 报 Activity 不存在
该包没有对外暴露的 MainActivity,只作为后台服务存在,am start 必然失败,不代表包损坏。
五、本次精简规则总结(适配本机 Android 6 小米电视)
**无 root Android 6,优先只用
pm disable-user,尽量少用pm uninstall --user 0**。disable-user是冻结,保留用户记录,可用pm enable恢复,安全可逆;uninstall --user 0清除注册记录,Android 6 没有install-existing,恢复困难。黑名单包(一律不动):
com.xiaomi.mitv.mediaexplorer(Settings 存储/U盘依赖)mitv.service(通用设置/输入源依赖)- 名字带
mediaexplorer、fileprovider、settings附属媒体组件的包
每卸载/冻结 1 个包,立刻测试打开设置,稳定之后再下一个,绝不一批操作完再测试。
**
priv-app和vendor/app风险远高于普通system/app**,精简优先避开这两类目录。不要信任高版本盒子(Android 9/11)的精简脚本,它们有
install-existing,权限策略也不一样。操作前先记录包的 APK 路径,万一需要恢复,能直接
cp+adb install,不用再find碰权限墙。
六、恢复流程速查卡(存档用)
1 | # ========== 通用恢复流程 ========== |
七、当前状态说明与后续风险
当前状态:两个包均以“更新”形式挂在 /data/app 下(pm path 显示 /data/app/com.xiaomi.mitv.mediaexplorer-1/base.apk),覆盖在 /system/vendor/app 和 /system/app 的原始 APK 之上。这是 Android 系统应用更新的标准机制,功能完全等效。
风险提示:
- **不要再对这两个包执行
pm uninstall或pm disable-user**。 - 任何清空
/data的操作(恢复出厂、双清)会移除当前/data/app下的更新,但系统首次启动会重新扫描/system分区并注册原始 APK;同时你之前的pm uninstall --user 0记录也存储在/data中、会被一并清除。恢复出厂不会让问题复发,反而回到干净状态,是安全兜底。 - 如果将来恢复出厂后设置再次异常,重新执行上面的速查卡即可。
一句话总结:Android 6 上 pm uninstall --user 0 卸载的包,恢复时**必须用 adb install --user 0 而不是 adb shell pm install**(后者返回 Success 但不会写入 user 0 注册记录);小米电视 Settings 的依赖是多层的,mediaexplorer 管设置首页,mitv.service 管通用设置和输入源,两条依赖线缺一不可。
