折腾日志 2026-06-29
记录一整天的操作:从手机去 bloated → 变砖 → 抢救照片 → 跨设备迁移
一、开局:ADB 屠龙
目标
旧手机 A 预装软件太多,打算卸干净当服务器用。
方式
adb shell pm uninstall -k --user 0 <pkg>
卸载范围(多轮)
- 预装商店、浏览器、音乐、视频、阅读
- 华为云、钱包、推送
- 搜索、语音助手、游戏服务
- 日历、闹钟、媒体中心
- 短信、彩信、下载管理器
- 蓝牙、WiFi 相关
- 各类框架(HMS、HIAI、HiView...)
- 安全中心、省电管理、设备管理
卸载统计
累计卸载约 100+ 个包,全部返回 Success
二、作死:卸了不该卸的
操作
继续卸载电话/通讯相关包:
com.android.phonecom.android.server.telecomcom.android.incalluicom.android.contactscom.android.providers.telephonycom.huawei.ims
结果
手机重启后卡在 Logo 界面 → boot loop,变砖
教训
pm uninstall --user 0只移除当前用户可见部分,但安卓系统服务被移除后无法启动- 部分系统应用(phone、telecom)是核心组件,卸了直接崩
- 进 recovery 可访问文件系统,但无法正常启动
三、抢救:取出照片
方法
- 按住音量上 + 电源 → 进入 eRecovery 模式
- 通过 MTP 连接电脑 → 手机存储显示为移动设备
- 手动拷贝照片到 PC
备份范围
仅 Camera(相机照片)+ Screenshots(截图),2023 年+ 跳过 QQ / 微信等聊天图片文件夹
四、接盘:连上新手机
背景
数据曾从旧手机 A 迁移到新手机 B,但迁移不完整
连接
adb connect 192.168.31.x:5555 — 无线 ADB
对比方式
adb shell ls枚举 B 手机文件- MTP Shell.Application 枚举 A 手机文件
- PowerShell
Where-Object { $B -notcontains $_ }找差异 - 缺失文件从 A 的 MTP → PC 临时目录 →
adb push→ B 手机
同步范围
| 目录 | 结果 |
|---|---|
| DCIM/Camera | 补推约 140 张(2022–2023 缺失) |
| Pictures/Screenshots | 补推 66 张 |
| Pictures/新建相册 | 补推 72 张(原为空) |
| 其他相册(~6个) | 补推约 15 张 |
| QQ/微信 | 跳过(按指示) |
五、踩坑记录
1. ADB 中文路径编码 bug
- 现象:
adb push xxx.jpg /sdcard/Pictures/中文目录/后,文件名被截断 - 如
IMG_20230720_095918.jpg→IMG_20230720_0959 - 原因:ADB 协议在传输中文路径时发生编码截断
- 解决:出现残缺文件后
rm -rf清空重建,重新推送
2. MTP 文件访问极慢
- Windows Shell.Application COM 对象访问 MTP 设备,每枚举一次 10~30s
- 大目录(200+文件)容易超时
- 策略:分批读取、保存列表到文件后离线比对
3. 文件名特殊字符转义
[]()空格在 adb shell 中有特殊含义mv操作需要转义或使用cat >重定向
4. PowerShell 中文编码
- 中文目录/文件名在控制台输出乱码,影响调试
ls结果与find -type f结果可能不一致- 改用
find ... -exec basename获取纯净文件名
六、当前状态
- [x] 旧手机照片已全部备份到 PC
- [x] 旧手机照片已完整同步到新手机 B
- [ ] 旧手机仍变砖(卡 logo,boot loop)
七、待办
- 救旧手机 —— 方案:
- 官方 HiSuite 系统修复
- eRecovery 在线恢复
- 恢复出厂设置(照片已安全,可接受)
- 救活后安装 Termux,搭建服务器环境
八、技术备忘
| 项目 | 命令/方法 |
|---|---|
| 卸载应用 | pm uninstall -k --user 0 <pkg> |
| 恢复应用 | pm install-existing <pkg> |
| 无线 ADB 连接 | adb connect <ip>:5555 |
| MTP 编程访问 | Shell.Application COM 对象 |
| MTP 文件拷贝 | folder.CopyHere(item, 0x14) |
| 文件列表保存 | list | Out-File path.txt |
| 文件名比对 | $A | Where-Object { $B -notcontains $_ } |
| push 到中文目录 | 尽量避免,或用 cat + mv 替代 |
| 列出目录文件 | find /path -type f |