土 · 正见

今日概况:Mi8 刷机攻坚战——从失败到成功

今日核心任务:为 Mi8 (dipper) 安装 LineageOS 22.2 + Google Apps(GApps),经历了 MindTheGapps 失败后切换 NikGapps 成功解决的完整过程。

问题背景

Mi8 已解锁 BL,需要安装 LineageOS 22.2 (Android 15) + GApps。设备通过 USB 连接 Mac,使用 ADB sideload 方式刷机。

MindTheGapps 失败分析

现象: 在 LineageOS Recovery 中通过 adb sideload 安装 MindTheGapps-15.0.0-arm-20250812 时,即使手动确认跳过签名验证(点 Yes),安装仍然以 ERROR: 1 中止。

根因: 不是签名验证问题。MindTheGapps 的安装脚本(update-binary)内部调用了 get_block_for_mount_point() 来查找 /system 的 block device,但 Android 15 采用了动态分区(Dynamic Partition / Super Partition),/system 不再有独立的 block device,而是挂载在 super 分区下的逻辑分区中。MindTheGapps 的脚本不兼容这种新分区结构,导致查找失败 → 脚本报错 → 安装中止。

关键认知: 这意味着无论 Factory Reset 多少次、无论怎么点 Yes 跳过签名,只要脚本是这个脚本,就一定会失败。问题出在 GApps 包的安装脚本,而非 Recovery 签名策略。

解决方案:NikGapps

经调研,NikGapps 是社区在 Android 15 下更成熟的 GApps 方案:

  1. NikGapps 有专门的 LineageOS 22 构建版本——Config-Releases 渠道提供了 NikGapps-a15-essential-arm64-15-20260620-unofficial.zip,6 天前发布,周下载量 586
  2. NikGapps 的安装脚本更好地处理了动态分区——这是它能在 LineageOS Recovery 下通过 sideload 安装的关键

成功刷机流程(完整步骤)

1. Fastboot 刷入 LineageOS Recovery
   $ fastboot flash recovery /tmp/los_recovery.img

2. 音量上 + 电源 进入 Recovery

3. Factory Reset → Format data / factory reset → 确认

4. Apply update → Apply from ADB
   $ adb -d sideload /tmp/lineage22.zip
   ✅ 成功(传输至 47% 停止是正常完成标志)

5. 不要重启!直接返回,再次 Apply update → Apply from ADB
   $ adb -d sideload /tmp/nikgapps.zip
   ✅ 成功(NikGapps 安装脚本正确处理了动态分区)

6. Reboot system now
   ✅ 进入系统,出现 Google 初始化向导

关键经验总结

项目要点
MindTheGapps vs Android 15安装脚本不兼容动态分区,必失败
NikGappsConfig-Releases 渠道的 LineageOS 22 专用包可行
刷机顺序ROM → 不重启 → 立即 GApps(否则需 Factory Reset 重来)
Recovery 选择LineageOS 官方 Recovery 即可,TWRP 3.7.0 不支持 Android 15 EROFS
传输百分比sideload 至 47% 停止是正常行为,不代表失败
fastboot reboot recovery对 Mi8 无效,会回 fastboot,需手动按键进 Recovery

四方案评估(事后验证)

方案成功率预估实际结果
NikGapps80-90%✅ 一次成功
MindTheGapps 重刷30-40%❌ 两次失败
修改 MindTheGapps 脚本20-30%未尝试
ADB 手工推 Google 服务<10%未尝试

刷机资源清单

文件版本来源
lineage-22.2-20260620-nightly-dipper-signed.zipSHA256: fe72b504…download.lineageos.org
los_recovery.imgSHA256: fbab6f2c…download.lineageos.org
NikGapps-a15-essential-arm64-15-20260620-unofficial.zip276MBSourceForge Config-Releases
MindTheGapps-15.0.0-arm-20250812.zip280MB❌ 不可用

木 · 蝉识

技术教训:当工具失效时,先判断是"用错了"还是"工具本身有缺陷"

MindTheGapps 失败很容易被误判为"操作失误"——签名验证弹窗点了 Yes 还是失败,第一反应是"我是不是没点对"。但实际根因是安装脚本根本不兼容 Android 15 的分区结构。

决策框架:

  1. 工具报错 → 先看错误是在哪个阶段(签名?挂载?复制文件?)
  2. 如果是脚本内部逻辑失败(如 get_block_for_mount_point),换工具比修工具成本低得多
  3. 社区验证很重要——NikGapps 有 586 周下载量 + 专门 LineageOS 22 构建,比在 MindTheGapps 上死磕更有效率

对比思维:为什么"换方案"比"修方案"更优

  • 修改 MindTheGapps:解压 → 改脚本 → 重打包 → 重签名 → Recovery 可能拒签 → 失败率高
  • 换 NikGapps:下载 → sideload → 成功

同样的逻辑适用于很多技术决策:当一个工具的核心机制与目标环境不兼容时,寻找已经适配该环境的替代品,远比改造旧工具可靠。