安卓刷 GSI + Root 全流程:从解锁 Bootloader 到 Magisk / KernelSU
刷机会清空数据、失去保修、可能变砖。本文能帮你把可控风险降低,但不能把风险降为零。动手前请确认:这台手机里的东西,你都备份好了。
一、先把名词对齐,不然后面全是天书
刷机教程最劝退的地方不是步骤,是一堆缩写。先把这几个概念理清楚,后面看文件名就不会懵。
一句话理解 GSI 的原理:Treble 之后,system 和 vendor 之间只通过标准接口通信,所以 Google 可以做一个"万能 system",塞进任何厂家的 vendor 上。你刷 GSI 时,内核、驱动、相机 HAL、基带全都不动,换掉的只有上层框架和应用。
这也解释了两件事:为什么刷完 GSI 相机算法还在(HAL 在 vendor),但相机 App 可能不认(AOSP 相机不会调厂商私有接口);以及为什么 Root 要在 boot 分区做文章(system 换不换都不影响内核)。
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 # 小米/红米专用,反回滚计数结果怎么读
arm64 和 a64 是最容易搞混的一对:arm64 要求内核提供 64 位 binder,a64 是"64 位用户空间 + 32 位 binder",给那些跑着 64 位 SoC 但内核只开了 32 位 binder 的老机器用的。判断不准就两个都下载,卡 logo 就换另一个,成本只是多下一次。
解锁这一关,有些机器根本过不去
这不是技术问题,是厂商策略问题。动手前先确认你的机型在不在"能解锁"的名单里。
解锁一定会清空数据(fastboot flashing unlock 会触发 factory reset),这是设计如此,不是 bug。所以顺序永远是:备份 → 解锁 → 刷机。
三、备份:跳过这一步的人,后来都在论坛发帖
刷 GSI 只动 system,理论上不碰你的数据。但解锁会清空一次,fastboot -w 又会清空一次,中间任何一次操作失误都可能让数据回不来。所以备份要做两遍:解锁前一遍,刷机前一遍。
必须备份的东西
已经 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.xzpayload-dumper-go,从 OTA 包的
payload.bin里提取boot.img对应机型的救砖工具:小米 MiFlash、三星 Odin、高通 QFIL / 9008、MTK SP Flash Tool
四、选镜像:GSI 文件名里每个后缀都是信息
以 system-arm64-ab-vanilla-vndklite.img.xz 为例,从右往左读:
几个实用结论:
优先
vanilla+ 自己刷 Root。带su的版本用的是 GSI 作者自己的一套权限管理,和 Magisk / KernelSU 会打架,而且不好排查。vndklite不是"更好",是"更兼容"。它砍掉了一部分 VNDK 检查,正常机器用普通版更完整;只有卡开机、logcat 里报VNDK相关错误时才换它。版本跨度不要超过两代。经验法则是 GSI 的 Android 版本 ≤ 原厂系统版本 + 2。Android 11 的 vendor 跑 Android 15 的 GSI,能开机是运气,能用是奇迹。
下载后校验哈希。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.img5.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 32212254725.4 刷入并清数据
fastboot flash system gsi.img
fastboot -w
fastboot rebootfastboot -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 刷入阶段的常见报错
六、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 一行。
6.2 提取原厂 boot
从官方固件包里拿。OTA 包解出来的 payload.bin 需要工具处理:
payload-dumper-go -o out payload.bin
# 输出目录里会有 boot.img / init_boot.img / vbmeta.img 等6.3 修补并刷入
把
boot.img传到手机打开 Magisk App → 安装 → 选择并修补一个文件 → 选
boot.img生成的
magisk_patched-xxxxx.img在Download/目录拉回电脑并刷入:
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 机型的替代方案
内核编译劝退的话,还有几个选择:
APatch 值得单独说一句:它只需要 CONFIG_KALLSYMS_ALL,不用编译内核,刷个修补过的 boot 就能用,对老机器非常友好。代价是生态比 Magisk 小,模块兼容性一般。
八、Magisk 还是 KernelSU
怎么选:
第一次刷机、想少折腾 → 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% 的隐身不存在。
几个必须知道的事实:
PIF 是军备竞赛,不是一劳永逸。 Google 在逐步推硬件级 attestation,指纹和 keybox 会周期性失效,需要跟着更新。别把重要账号绑在"能过检测"这个前提上。
国内 App 的检测维度更多。 除了 Play Integrity,还会查包名列表、查
/proc/mounts、查 SELinux 状态、查su路径、查内核版本字符串。有些银行 App 只要看到verifiedbootstate=orange就直接退出,任何模块都救不了。KernelSU 不是"天生隐身"。 它的优势是没有 magiskd 这种明显进程,但内核级的
su一样能被检测到(比如扫描 syscall 表、检测 kprobe)。真要隐蔽,得配合内核patch和自定义编译。最稳的方案是双机。 主力机不折腾,折腾机不装银行 App。这句话听着像妥协,但对大多数人来说是最省心的选择。
十一、翻车急救手册
按症状查,比从头排查快得多。
卡住时的通用排查顺序
看能不能进 fastboot —— 能进就还有救,90% 的问题能靠刷回原厂解决
看能不能进 recovery —— 能进说明 boot 分区基本正常,问题在 system
接 logcat 看卡在哪 ——
adb logcat有输出说明内核起来了,问题在框架层逐分区回滚 —— 先刷回
boot,再刷回system,定位是哪一步坏的整包刷原厂 —— 前面都不行,别硬撑,直接整包刷回
十二、怎么回到官方系统
留一条退路,比什么都重要。
# 通用 fastboot 路线(分区名按机型调整)
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash vbmeta vbmeta.img
fastboot -w
fastboot reboot但更可靠的是用厂商工具整包刷:
刷回官方后,系统会恢复成出厂状态:解锁标记还在(除非手动锁回),但功能全部正常,可以正常收 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 为准。不同厂商的分区命名和政策会变,操作前请以你的机型社区文档为准。

