7
0
0

安卓刷 GSI + Root 全流程:从解锁 Bootloader 到 Magisk / KernelSU

2026-10-18
2026-10-18

刷机会清空数据、失去保修、可能变砖。本文能帮你把可控风险降低,但不能把风险降为零。动手前请确认:这台手机里的东西,你都备份好了。


一、先把名词对齐,不然后面全是天书

刷机教程最劝退的地方不是步骤,是一堆缩写。先把这几个概念理清楚,后面看文件名就不会懵。

名词

是什么

为什么你要关心

Treble

Android 8.0 引入的分层架构,把「系统框架(system)」和「驱动/HAL(vendor)」拆开

只有支持 Treble 的机器才能刷 GSI

GSI

Generic System Image,Google 定义的"通用 system 镜像"

一次编译,全 Treble 机型通用,不挑品牌

VNDK

Vendor NDK,system 和 vendor 之间的稳定接口层

vendor 越老,越需要 vndklite 版本

A/B 分区

系统有两套槽位,OTA 时写入空闲槽,重启切换

决定你刷 -ab 还是 -a 镜像

GKI

Generic Kernel Image,Android 12 起统一的通用内核

决定 KernelSU 能不能用官方预编译内核

AVB / vbmeta

Android Verified Boot,启动时逐级校验镜像签名

不改 vbmeta,刷完 GSI 必卡 logo

fastbootd

运行在用户空间的 fastboot,能操作动态分区(super)

Android 10+ 机型刷 system 必须用它

super 分区

一个物理分区,里面装 system / product / vendor 等逻辑分区

空间不够时,得删逻辑分区腾地方

一句话理解 GSI 的原理:Treble 之后,system 和 vendor 之间只通过标准接口通信,所以 Google 可以做一个"万能 system",塞进任何厂家的 vendor 上。你刷 GSI 时,内核、驱动、相机 HAL、基带全都不动,换掉的只有上层框架和应用。

这也解释了两件事:为什么刷完 GSI 相机算法还在(HAL 在 vendor),但相机 App 可能不认(AOSP 相机不会调厂商私有接口);以及为什么 Root 要在 boot 分区做文章(system 换不换都不影响内核)。

GSI 能得到什么,会失去什么

先把预期摆正,能省掉很多"刷完就后悔"。

你会得到

你会失去

干净的类原生系统,无预装、无广告

厂商相机算法、专业模式、多摄切换

最新 Android 版本(老机型续命)

快充私有协议可能降速

统一的 UI 和交互逻辑

LDAC / aptX 等高清蓝牙编解码(部分机型)

更容易维护、可脚本化

双扬声器调音、高刷/HDR 策略

原生开发者选项和调试能力

指纹、人脸、NFC 门禁等厂商定制功能

——

OTA 更新(GSI 只能手动刷新版)


二、刷之前:先给手机做一次体检

不要凭型号猜。插上数据线,打开 USB 调试,跑下面这几条命令,答案全在里面。

adb shell getprop ro.treble.enabled          # true = 支持 Treble
adb shell getprop ro.build.ab_update         # true = A/B 分区
adb shell getprop ro.product.cpu.abilist     # 架构,看有没有 arm64-v8a
adb shell getprop ro.vndk.version            # 28~36,对应 Android 9~16
adb shell getprop ro.product.first_api_level # 出厂时的 Android API
adb shell uname -r                           # 内核版本,KernelSU 的关键
adb shell getprop ro.boot.verifiedbootstate  # orange = 已解锁,green = 未解锁

再进 bootloader 看解锁状态和槽位:

adb reboot bootloader
fastboot getvar unlocked
fastboot getvar current-slot
fastboot getvar anti          # 小米/红米专用,反回滚计数

结果怎么读

你的情况

该选什么镜像

abilist 含 arm64-v8a,ab_update=true

system-arm64-ab-*

abilist 含 arm64-v8a,ab_update=false

system-arm64-a-*

abilist 只有 armeabi-v7a

system-arm-*(32 位)

64 位 SoC 但只有 32 位 binder(老内核常见)

system-a64-*

vndk.version ≤ 30(Android 11 及更早)

优先 -vndklite 版本

想用 Google 服务

gapps 版

想自己装 GApps / 追求干净

vanilla 版

arm64 和 a64 是最容易搞混的一对:arm64 要求内核提供 64 位 binder,a64 是"64 位用户空间 + 32 位 binder",给那些跑着 64 位 SoC 但内核只开了 32 位 binder 的老机器用的。判断不准就两个都下载,卡 logo 就换另一个,成本只是多下一次。

解锁这一关,有些机器根本过不去

这不是技术问题,是厂商策略问题。动手前先确认你的机型在不在"能解锁"的名单里。

品牌

解锁方式

难度与现实

Google Pixel

fastboot flashing unlock

最简单,官方鼓励

小米 / 红米

小米社区申请 + 答题 + 等待期

越来越严,新机型限制多,7~30 天不等

一加 / realme

深度测试申请

部分机型关闭通道,需审核

OPPO / vivo / iQOO

深度测试 / 官方申请

机型差异极大,很多不支持

三星

开发者选项 → OEM 解锁

触发 Knox 熔断 0x1,Samsung Pay / 健康永久失效

华为 / 荣耀

2018 年后停止发放解锁码

基本无解,第三方付费解锁风险极高

moto / 诺基亚 / 部分国产

官方解锁页申请

看具体型号

解锁一定会清空数据(fastboot flashing unlock 会触发 factory reset),这是设计如此,不是 bug。所以顺序永远是:备份 → 解锁 → 刷机。


三、备份:跳过这一步的人,后来都在论坛发帖

刷 GSI 只动 system,理论上不碰你的数据。但解锁会清空一次,fastboot -w 又会清空一次,中间任何一次操作失误都可能让数据回不来。所以备份要做两遍:解锁前一遍,刷机前一遍。

必须备份的东西

内容

方法

重要性

照片 / 微信聊天记录

微信自带"聊天记录迁移"到电脑;照片直接拷

丢了没法重建

应用数据

厂商云备份 / 钛备份(需已有 root)

高

persist 分区

dd 导出,含传感器校准、指纹校准

极高

modemst1 / modemst2 / fsg

dd 导出,含 IMEI 相关数据

极高

nvram / nvdata(MTK)

dd 导出

极高

原厂固件包

官网下载,整包留着

极高(救砖用)

boot.img / init_boot.img

从固件包解出

高(Root 失败要刷回)

已经 root 的机器,直接 dd 出来存到电脑:

adb shell su -c "dd if=/dev/block/by-name/persist of=/sdcard/persist.img"
adb shell su -c "dd if=/dev/block/by-name/modemst1 of=/sdcard/modemst1.img"
adb shell su -c "dd if=/dev/block/by-name/modemst2 of=/sdcard/modemst2.img"
adb pull /sdcard/persist.img .
adb pull /sdcard/modemst1.img .
adb pull /sdcard/modemst2.img .

还没 root 的机器备份不了这些分区,只能靠原厂固件包兜底。原厂固件包里通常含有完整的分区镜像,救砖时整包刷回即可——所以"下载原厂固件"不是可选步骤,是必做步骤。

工具清单

  • platform-tools(adb / fastboot),版本越新越好,老版本不认 fastbootd 和动态分区

  • 7-Zip 或 xz,用来解压 .img.xz

  • payload-dumper-go,从 OTA 包的 payload.bin 里提取 boot.img

  • 对应机型的救砖工具:小米 MiFlash、三星 Odin、高通 QFIL / 9008、MTK SP Flash Tool


四、选镜像:GSI 文件名里每个后缀都是信息

以 system-arm64-ab-vanilla-vndklite.img.xz 为例,从右往左读:

片段

含义

system

刷入目标分区

arm64

64 位 binder + 64 位用户空间

a64

32 位 binder + 64 位用户空间

arm

纯 32 位

ab

A/B 分区设备;没有 ab 就是 A-only

vanilla

不含 Google 服务,最干净

gapps

内置 Google 服务框架

vndklite

放宽 VNDK 依赖,给老 vendor 用

su / nosu

是否内置 GSI 自带的 root(建议选 nosu)

几个实用结论:

  1. 优先 vanilla + 自己刷 Root。带 su 的版本用的是 GSI 作者自己的一套权限管理,和 Magisk / KernelSU 会打架,而且不好排查。

  2. vndklite 不是"更好",是"更兼容"。它砍掉了一部分 VNDK 检查,正常机器用普通版更完整;只有卡开机、logcat 里报 VNDK 相关错误时才换它。

  3. 版本跨度不要超过两代。经验法则是 GSI 的 Android 版本 ≤ 原厂系统版本 + 2。Android 11 的 vendor 跑 Android 15 的 GSI,能开机是运气,能用是奇迹。

  4. 下载后校验哈希。GSI 动辄 1~2 GB,下载损坏导致的"刷完不开机"最难排查。

目前主流的 GSI 来源:

  • TrebleDroid:社区维护的 AOSP GSI,版本跟进最快,A/B 和 A-only 都覆盖

  • phhusson / treble_experimentations:GSI 生态的起点,文档最全,停在 Android 13 一代

  • 各大 ROM 团队的 GSI 分支:LineageOS、crDroid、Voltage 等,功能更花哨,兼容性略差


五、刷入 GSI:fastbootd 是唯一正确姿势

Android 10 之后,system 变成了 super 分区里的逻辑分区,传统 bootloader 模式的 fastboot 根本看不见它。所以流程必须是:bootloader → fastbootd → 刷入。

5.1 先关掉 verity 和 verification

这一步跳过的人,90% 会卡在品牌 logo。原理是 AVB 会在启动时校验 system 的签名,你换了一个 Google 签名的镜像,校验必然失败,于是设备拒绝启动。

先从原厂固件包里取出 vbmeta.img,然后:

adb reboot bootloader
fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img

老版本 platform-tools 的参数位置不同,等价写法:

fastboot flash vbmeta --disable-verity --disable-verification vbmeta.img

部分机型把校验拆到了 vbmeta_system / vbmeta_vendor,那就一起处理:

fastboot --disable-verity --disable-verification flash vbmeta_system vbmeta_system.img

5.2 进 fastbootd

fastboot reboot fastboot

看到屏幕上出现 fastbootd 字样(通常是彩色菜单或英文提示)才算成功。如果直接重启回了系统,说明你的 recovery 不支持 fastbootd,只能走 TWRP 路线。

5.3 腾空间(可选,但很常见)

GSI 通常比原厂 system 大,而 super 分区总大小是固定的。刷入报 Not enough space to build proposed filesystem 时,就得删掉用不上的逻辑分区:

fastboot delete-logical-partition product_a

删 product 一般最安全,GSI 不依赖它。如果还不够,可以再删 system_ext_a,但部分机型删了会丢 VoLTE 配置,谨慎。

也可以直接调整 system 分区大小(单位是字节):

fastboot resize-logical-partition system_a 3221225472

5.4 刷入并清数据

fastboot flash system gsi.img
fastboot -w
fastboot reboot

fastboot -w 会清空 userdata 和 metadata。这一步不能省:原厂系统的 data 是用厂商的 FBE 密钥加密的,GSI 解不开,不清就会卡在开机动画里反复重启。

A/B 机型默认刷当前槽。想让两个槽都换成 GSI:

fastboot --slot=all flash system gsi.img

但要注意,如果另一个槽里是还没升级的旧系统,切过去可能直接开不了机。稳妥做法是先确认当前槽是好的,再考虑要不要动另一个。

5.5 第一次开机

首次启动会重建 ART 缓存,5~15 分钟都算正常,屏幕可能长时间停在开机动画。这时候不要慌,也不要反复重启——插着电等,同时用 logcat 看进展:

adb logcat | grep -iE "boot|fatal|avc"

判断标准:如果 logcat 一直在滚,就是在正常初始化;如果完全没输出、几秒后自动重启,那是真卡住了。

5.6 刷入阶段的常见报错

报错

原因

处理

Not enough space to build proposed filesystem

super 空间不足

删 product_a,或 resize-logical-partition

Couldn't parse partition size

用了 bootloader 而不是 fastbootd

fastboot reboot fastboot 后重试

Sparse image is not valid

镜像没解压完 / 下载损坏

重新解压 .img.xz,校验哈希

FAILED (remote: 'Partition not found')

分区名带槽位后缀

试 system_a / system_b

fastboot: error: cannot load 'gsi.img'

路径或文件名不对

用绝对路径,确认解压出的是 .img


六、Root 路线 A:Magisk

Magisk 的原理是改 boot 镜像:把 Magisk 的 init 塞进 ramdisk,开机时由它挂载一个覆盖层(overlay),在不改动 system 的前提下实现 root、模块、Zygisk。所以它和 GSI 是天作之合——GSI 换 system,Magisk 改 boot,互不干扰。

6.1 先搞清楚补哪个分区

Android 13 之后,很多机型把 ramdisk 从 boot 挪到了独立的 init_boot。补错分区,Magisk 会显示"已安装"但实际没生效。

判断方法:打开 Magisk App,看首页的 Ramdisk 一行。

显示

该补哪个

Ramdisk: Yes

补 boot.img

Ramdisk: No,且存在 init_boot 分区

补 init_boot.img

Ramdisk: No,没有 init_boot

老机型,只能补 recovery.img(已不推荐)

6.2 提取原厂 boot

从官方固件包里拿。OTA 包解出来的 payload.bin 需要工具处理:

payload-dumper-go -o out payload.bin
# 输出目录里会有 boot.img / init_boot.img / vbmeta.img 等

6.3 修补并刷入

  1. 把 boot.img 传到手机

  2. 打开 Magisk App → 安装 → 选择并修补一个文件 → 选 boot.img

  3. 生成的 magisk_patched-xxxxx.img 在 Download/ 目录

  4. 拉回电脑并刷入:

adb pull /sdcard/Download/magisk_patched-xxxxx.img .
adb reboot bootloader
fastboot flash boot magisk_patched-xxxxx.img
fastboot reboot

如果是 init_boot 架构,最后一步换成:

fastboot flash init_boot magisk_patched-xxxxx.img

不要用同一个补丁文件同时刷 boot 和 init_boot,补丁是针对具体分区生成的,刷错位置轻则无效,重则开不了机。

6.4 GSI 下用 Magisk 的三个坑

第一,system 是只读的。 GSI 通常以 EROFS 或只读 ext4 挂载,任何"直接改 /system"的操作都会失败。要用模块,走 Magisk 的 overlay;要改 hosts、删系统 App,也用模块实现,别去 mount -o remount,rw /system。

第二,模块兼容性。 很多模块假设你在厂商 ROM 上(比如改 MIUI 主题、改 OneUI 图标的),在 GSI 上装了大概率无效甚至卡开机。装模块前先看它是不是依赖特定 ROM,出问题就进安全模式(开机时按住音量下)禁用模块。

第三,Zygisk 和隐藏。 GSI 本身是 userdebug 构建,ro.debuggable=1,一些 App 会直接因此判定为不安全。Magisk 的 DenyList 只能挡住部分检测,实际要配 Zygisk + Shamiko 才够用。


七、Root 路线 B:KernelSU

KernelSU 走的是另一条路:root 权限由内核直接提供,用户空间的 su 只是一个壳。好处是隐蔽性更好(没有 magiskd 进程、没有一堆挂载点)、模块实现更干净;代价是必须有匹配的内核。

这是 GSI 用户最容易踩的坑:GSI 只换 system,内核还是原厂的,所以你不能"装个 KernelSU App"就有 root,必须让内核里带上 KernelSU。

7.1 先确认是不是 GKI

adb shell uname -r
# 例:5.10.101-android12-9-g1a2b3c4d

拆开看:

  • 5.10.101 —— 内核版本

  • android12-9 —— KMI(Kernel Module Interface)代际,必须完全匹配

  • g1a2b3c4d —— 厂商自己的提交,不影响匹配

GKI 的判定标准:Android 12 及以上 + 内核 5.10 及以上。满足就可以走官方预编译路线;不满足就得自己编译内核,难度直接上一个台阶。

7.2 三条子路线,按难度排序

路线一:GKI 整包(最简单)

去 KernelSU 的 release 页面,找文件名里内核版本完全一致的 boot-*.img,直接刷:

fastboot flash boot boot-5.10.101-android12-9-xxxx.img
fastboot reboot

开机后装 KernelSU 管理器 APK,首页显示版本号即成功。

风险提示:这是用通用 GKI 内核替换厂商内核,厂商在 boot 里塞的自定义 cmdline、温控参数、触摸驱动全都会被换掉。部分机型能正常开机,部分会卡 logo 或丢功能。刷之前务必确认手里有原厂 boot.img,随时能刷回去。

路线二:LKM 模式(推荐,保留原厂内核)

LKM 是 Loadable Kernel Module。不改内核本体,只在 boot 的 ramdisk 里加一段逻辑,开机时加载 kernelsu.ko。这样厂商内核的改动全部保留,兼容性好得多。

操作大致是:KernelSU 管理器 → 安装 → 选择 boot.img → 修补 → 刷入修补后的镜像。不同版本的入口文案略有差异,以管理器内的提示为准。

前提是你的内核版本要有对应的 kernelsu.ko,官方 release 一般覆盖主流 GKI 版本;太冷门的机型可能没有。

路线三:自己编译内核(最难)

非 GKI 机型(Android 11 及更早、内核 4.x)只能走这条:拿厂商开源的内核源码,打上 KernelSU 的补丁,用对应的工具链编译,产出新的 boot.img。

需要的东西:内核源码、正确的 defconfig、交叉编译工具链、CONFIG_KSU=y。编译出来的镜像还要保证和 vendor 的模块(.ko)ABI 兼容,否则会各种外设失灵。

如果你走到这一步,建议直接看 KernelSU 官方文档的「非 GKI 设备」章节,按机型社区里现成的配置抄,别从零调。

7.3 刷完怎么验证

adb shell su -c id
# 应该输出 uid=0(root)

管理器里应该能看到:

  • 版本号(不是"未安装")

  • 工作模式(GKI / LKM)

  • 已授权应用列表

如果显示"未安装",八成是内核版本没对上,或者刷错了分区(boot vs init_boot)。

7.4 非 GKI 机型的替代方案

内核编译劝退的话,还有几个选择:

方案

原理

适用

KernelSU Next

KernelSU 分支,回移植了更多内核版本

官方不支持的老内核

SukiSU Ultra

另一分支,用 syscall 钩子替代 kprobe

内核配置受限的机型

APatch

直接给 boot 打二进制补丁,不需要内核源码

非 GKI、想快速上车的机型

APatch 值得单独说一句:它只需要 CONFIG_KALLSYMS_ALL,不用编译内核,刷个修补过的 boot 就能用,对老机器非常友好。代价是生态比 Magisk 小,模块兼容性一般。


八、Magisk 还是 KernelSU

维度

Magisk

KernelSU

实现层级

用户空间(init + overlay)

内核空间

前提条件

能改 boot 即可

必须有匹配内核

安装难度

低,任何机型都能试

高,GKI 以外要编译

隐蔽性

一般,有 magiskd 和挂载痕迹

较好,内核级 su

模块生态

极大,几乎全部模块都支持

较小,主流模块基本可用

与 GSI 配合

天然适配

需要额外解决内核问题

升级维护

成熟稳定

活跃但变动快

怎么选:

  • 第一次刷机、想少折腾 → Magisk。补个 boot 就完事,出问题也好回滚。

  • 机型是 GKI(Android 12+ / 内核 5.10+)→ KernelSU 的 LKM 模式,兼顾隐蔽性和兼容性。

  • 有内核源码、追求极致隐蔽 → 自编译 KernelSU。

  • 非 GKI 又不想编译 → APatch,或者老老实实用 Magisk。

一个现实建议:先 Magisk 把系统跑通,确认 GSI 稳定了,再考虑换 KernelSU。两个变量一起动,出问题你分不清是谁的锅。


九、最重要的注意事项

前面都是"怎么做",这一节是"别做什么"。按后果严重程度分三级,前六级看一眼就能省下一台手机。

【致命】做了可能再也开不了机

1. 刷完 GSI 后,绝对不要重新锁 bootloader。

fastboot flashing lock 会让 AVB 重新校验启动链。你的 system 是 Google 签的、boot 是 Magisk 改过的,校验必然失败,设备会拒绝启动。部分机型会直接进 EDL/9008 模式,普通用户没有授权账号救不回来。

要锁回去,唯一正确顺序是:先完整刷回官方固件 → 确认能正常开机 → 再锁。顺序反了就是砖。

2. 注意反回滚(Anti-Rollback)。

小米/红米、三星等机型有 ARB 计数,写在高通的安全分区里。刷入 ARB 版本低于当前值的固件,会触发硬件级熔断——xbl 直接拒绝引导,变硬砖,刷什么固件都没用。

降级前先看当前值:

fastboot getvar anti

规则只有一条:只升不降。不确定的时候,别降级。

3. 别刷错机型和分区。

preloader、xbl、abl、modem、persist 这几个分区,刷错等于把引导链和手机的"身份证"写坏。尤其是跨机型刷固件,看着都是骁龙 8 Gen 2,分区布局可能完全不同。

只刷你确认过的分区。不确定的分区,一个都不要碰。

4. 刷写过程中不能断电、不能拔线。

电量保持 50% 以上,用主板后置 USB 口,用原装线,别接 USB Hub。刷 super 这种大分区时断电,分区表可能直接损坏。

5. IMEI / NV 数据丢了,基本救不回来。

IMEI 存在 modemst1/2、fsg、persist 里,MTK 还有 nvram / nvdata。这些数据没有通用备份,刷坏了就是"无服务",而且没有合法途径重建。

解锁前能 root 就 dd 出来;不能 root 就把原厂固件包留好。

6. MTK 机型别乱刷 preloader。

MTK 的 preloader 是 Boot ROM 之后的第一段代码,刷错后连 fastboot 都进不去,只能用 SP Flash Tool 配合授权账号或短接测试点救。这一步的门槛比高通高得多。

【高危】大概率能救,但要折腾一晚上

7. vbmeta 没关 verity,必卡 logo。 这是刷 GSI 失败最常见的原因,症状是品牌 logo 出现几秒后自动重启,无限循环。

8. data 加密不匹配,卡开机动画。 GSI 解不开厂商的 FBE 密钥,必须 fastboot -w。这一步会清空数据,所以备份要在前面做。

9. 版本跨度太大,硬件功能挂掉。 相机黑屏、通话无声、指纹失效、传感器不工作,基本都是 vendor 太老、GSI 太新。降一到两个版本通常能解决。

10. 逻辑分区空间不足。 报错很明确,删 product_a 或 resize 就行。但删之前想清楚:删掉的逻辑分区,得靠重刷原厂固件才能恢复。

11. A/B 机型只刷了一个槽。 某次 OTA 或手动切槽后,手机会回到旧系统,甚至因为 vbmeta 不匹配开不了机。要么两个槽都刷,要么明确知道自己只用当前槽。

12. GSI 默认是 userdebug 构建。 adb root 直接可用,ro.debuggable=1。这意味着任何拿到你手机 USB 权限的人都能提权,部分 App 也会因此拒绝运行。日常使用建议关掉 USB 调试。

【日常】不影响开机,但影响心情

13. Play Integrity 过不了。 解锁 bootloader 之后,Google 的完整性校验会从 MEETS_DEVICE_INTEGRITY 掉到 MEETS_BASIC_INTEGRITY,Google Pay、部分银行 App、Netflix 高清都会受影响。后面单独讲怎么缓解。

14. Widevine 从 L1 掉到 L3。 Netflix、Prime Video、Disney+ 只能看 SD 画质。这个是 TEE 层面的,root 隐藏也救不回来。

15. 银行、支付、政务类 App 可能直接拒绝运行。 国内 App 的检测比 Google 狠,很多会读 ro.boot.verifiedbootstate 和 ro.boot.flash.locked,解锁状态一票否决。

16. OTA 彻底失效。 GSI 不走厂商 OTA,系统更新只能手动刷新版 GSI。想回官方系统,得整包刷回。

17. 厂商特性大面积丢失。 相机算法、快充协议、LDAC/aptX、双扬声器调音、高刷策略、NFC 门禁卡,这些都在 vendor 或厂商 App 里,GSI 调不动。

18. 保修和二手残值。 解锁记录写在硬件里,售后一查就知道。二手出的时候,解锁过的机器普遍要折价。


十、Root 之后的"隐身":能藏多少,藏不住什么

这一节不是教你对抗检测,是把现实讲清楚:在解锁 bootloader 的机器上,100% 的隐身不存在。

需求

Magisk 方案

KernelSU 方案

隐藏 root 本身

Zygisk + Shamiko / Zygisk Assistant

内置 sulist + umount modules,配 ZygiskNext + Shamiko

过 Play Integrity

PlayIntegrityFix(PIF)

同左

伪造硬件证明

TrickyStore + 有效 keybox

同左

隐藏应用列表

Hide My Applist(HMA)

同左

伪装 bootloader 状态

BootloaderSpoofer 一类模块

部分内核支持

几个必须知道的事实:

  1. PIF 是军备竞赛,不是一劳永逸。 Google 在逐步推硬件级 attestation,指纹和 keybox 会周期性失效,需要跟着更新。别把重要账号绑在"能过检测"这个前提上。

  2. 国内 App 的检测维度更多。 除了 Play Integrity,还会查包名列表、查 /proc/mounts、查 SELinux 状态、查 su 路径、查内核版本字符串。有些银行 App 只要看到 verifiedbootstate=orange 就直接退出,任何模块都救不了。

  3. KernelSU 不是"天生隐身"。 它的优势是没有 magiskd 这种明显进程,但内核级的 su 一样能被检测到(比如扫描 syscall 表、检测 kprobe)。真要隐蔽,得配合内核patch和自定义编译。

  4. 最稳的方案是双机。 主力机不折腾,折腾机不装银行 App。这句话听着像妥协,但对大多数人来说是最省心的选择。


十一、翻车急救手册

按症状查,比从头排查快得多。

症状

大概率原因

处理

卡品牌 logo,几秒后重启

vbmeta 未关 verity

重刷 vbmeta 带 --disable-verity --disable-verification

卡品牌 logo,一直不动

镜像架构错(arm64 / a64 选反)

换另一个架构的 GSI 重刷

卡开机动画超过 20 分钟

data 加密不兼容 / vendor 太旧

fastboot -w;仍不行换 vndklite 版

开机后无信号、无 IMEI

modem / persist 被覆盖

刷回原厂 modem;有备份则恢复 persist

相机黑屏、闪光灯不亮

camera HAL 与 GSI 不兼容

换 GSI 版本,通常无解

指纹 / 人脸失效

厂商 HAL 缺失

无解,除非换回官方系统

反复重启进 Recovery

分区表或 super 损坏

整包刷回官方固件

Magisk 显示"未安装"

补丁刷错分区

boot / init_boot 换着刷

KernelSU 显示"未安装"

内核版本或 KMI 不匹配

换版本号完全一致的 boot

刷入报 sparse image 错误

镜像没解压 / 传输损坏

重新解压,校验哈希,换 USB 线

无法进入 fastbootd

recovery 不支持

走 TWRP 刷 system 镜像

卡住时的通用排查顺序

  1. 看能不能进 fastboot —— 能进就还有救,90% 的问题能靠刷回原厂解决

  2. 看能不能进 recovery —— 能进说明 boot 分区基本正常,问题在 system

  3. 接 logcat 看卡在哪 —— adb logcat 有输出说明内核起来了,问题在框架层

  4. 逐分区回滚 —— 先刷回 boot,再刷回 system,定位是哪一步坏的

  5. 整包刷原厂 —— 前面都不行,别硬撑,直接整包刷回


十二、怎么回到官方系统

留一条退路,比什么都重要。

# 通用 fastboot 路线(分区名按机型调整)
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash vbmeta vbmeta.img
fastboot -w
fastboot reboot

但更可靠的是用厂商工具整包刷:

平台

工具

注意

小米 / 红米

MiFlash

别勾 "clean all and lock",会重新上锁

三星

Odin

AP / BL / CP / CSC 四个包对应刷

高通(9008)

QFIL

需要进 EDL 模式,部分机型要短接

MTK

SP Flash Tool

需要 scatter 文件,别刷错 preloader

Pixel / 类原生

fastboot + 官方工厂镜像

flash-all.sh 一把梭

刷回官方后,系统会恢复成出厂状态:解锁标记还在(除非手动锁回),但功能全部正常,可以正常收 OTA。


十三、一页纸速查

# 1. 体检
adb shell getprop ro.treble.enabled
adb shell getprop ro.build.ab_update
adb shell getprop ro.product.cpu.abilist
adb shell getprop ro.vndk.version
adb shell uname -r

# 2. 解锁(会清数据)
adb reboot bootloader
fastboot flashing unlock

# 3. 关校验
fastboot --disable-verity --disable-verification flash vbmeta vbmeta.img

# 4. 进 fastbootd
fastboot reboot fastboot

# 5. 腾空间(可选)
fastboot delete-logical-partition product_a

# 6. 刷 GSI
fastboot flash system gsi.img
fastboot -w
fastboot reboot

# 7. Magisk:补 boot 后刷入
fastboot flash boot magisk_patched.img

# 8. KernelSU:刷匹配内核版本的 boot
fastboot flash boot boot-5.10.101-android12-9-xxxx.img

# 9. 救砖:整包刷回
fastboot flash boot boot.img && fastboot flash system system.img && fastboot -w

最后

刷机的本质是用可控的风险换可控的自由。GSI 让你不必等第三方 ROM 适配,Magisk 和 KernelSU 让你拿回系统的控制权,代价是保修、部分硬件功能和一堆需要自己排查的兼容性问题。

真正决定成败的不是技术,是习惯:先备份,再动手;一次只改一个变量;永远留一条能刷回去的路。

如果这是你第一次刷机,建议拿一台不重要的旧机器练手。刷坏一台备用机的成本,远低于刷坏主力机。


本文基于 Android 8.0 ~ 16 的 Treble 机型实践整理,命令以最新版 platform-tools 为准。不同厂商的分区命名和政策会变,操作前请以你的机型社区文档为准。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

安卓刷 GSI + Root 全流程:从解锁 Bootloader 到 Magisk / KernelSU
/archives/an-zhuo-shua-gsi-root-quan-liu-cheng-cong-jie-suo-bootloader-dao-magisk-kernelsu
作者
Administrator
发布于
2026-10-18
许可协议
CC BY-NC-SA 4.0

评论