Android 为智能手机的普及立下了汗马功劳,可是开源所导致的「碎片化」问题,一直是 Google 心中难以掩饰的痛。为了改变这一现状,Google 进行了许多尝试,例如在 Android 7.0 引入的「A/B(无缝)系统更新」,Android 8.0 时推出的「Project Treble」,都是为了铺平无障碍更新系统的道路,减轻更新失败导致设备故障的风险,以便厂商可以更轻松地推送系统更新。

而在 Android 11 版本,Google 使用了名为「virtual A/B」的新分区,并将其率先使用在 Google Pixel 5 上。「virtual A/B」更新系统的方法与「A/B」类似,核心功能也相同。在系统进行 OTA 更新时,如果更新失败会自动回滚到上一个系统,成功开机进入之后才会将新数据写入到系统中。且系统更新可在待机状态下完成,无需重启等待新数据写入,可谓是极大地改善了更新系统时的用户体验。只是「A/B」需要准备两个相同的分区,会占用更多的存储空间,而「virtual A/B」删除了「cache」和「recovery」分区,「system」分区只保留一个,以解决上述空间占用问题。1

小米 11 也是使用的「virtual A/B」,可这对我来说并不是什么好消息。因为「virtual A/B」删除了「recovery」分区,没有了「recovery」分区就不能刷入第三方「recovery」。因此在 TWRP 官方解决为这类新分区方式刷入第三方 recovery 之前,我只能使用其他方法来为小米 11 刷机了。

不过我这也算不上啥刷机,只是安装一个 Magisk 而已。这篇文章也会等到能刷上 TWRP 的时候,再继续更新。

刷机有风险,搞机需谨慎,请准备好备用机,做好变砖的心理准备。在确定当地有小米之家可进行售后维修后,再进行刷机操作。

以下是完整的刷机记录。

解锁

到手的手机还是出厂系统,先把系统更新到最新版本。我使用的是 MIUI 12.0.22.0 稳定版本,体验上还不赖。当然不想更新也没啥问题。

1. 启用开发者模式

刚到手的手机,先登录自己的小米账号,然后在设置中打开「开发者模式」。

MIUI 12 系统开启「开发者模式」的步骤是:设置 → 我的设备 → 全部参数,点按「MIUI 版本」七次,会有提示弹出「开发者模式已开启」。

设置「开发者模式」的入口在:设置 → 更多设置 → 开发者选项。勾选「OEM 解锁」、「USB 调试」。在「设备解锁状态」中,绑定账号与设备。

2. 下载解锁工具

前往「解锁小米手机」页面下载解锁工具。

3. 更新驱动

为了避免解锁或是刷机时出现各种不可预测的危险,先更新好驱动。把下载好的压缩包解压,点击miflash_unlock.exe打开解锁工具。

点击右上角设置。

在将手机连接到电脑前,一定要先在「开发者模式」里打开「USB 调试」,弹出类似「允许此电脑使用USB 调试」的字样,然后再点击「驱动检测」更新驱动。

4. 解锁

然后就可以解锁了。注意解锁会清除所有手机数据,所以不要急着往新手机里转移数据。解锁这个过程解锁工具会有提示,就跳过了。

不过一直有听说新手机解锁的话,需要绑定一段时间(大概是七天)的小米账号才行,但我手机一到手就解锁了……

解锁完后会自动重启,数据会被清空。

提取boot.img

目前刷机的目的仅是刷入 Magisk,Magisk 可以通过修补系统boot.img的方式刷入,毋需使用 TWRP 或是其他第三方 REC 工具刷入。

所以需要先提取当前系统的原始boot.img文件。

利用线刷包提取

小米社区中看看有没有手机当前系统版本的线刷包,下载下来,解压之后,就有boot.img,可以直接使用。只不过目前只有 MIUI 12 稳定版本的线刷包。

利用卡刷包(手机系统更新包)提取

小米社区还未提供当前使用版本的线刷包的话,也可以在手机系统更新中下载完整卡刷包。首先进入系统更新中点击下载完整更新包,下载开始后把后台全关闭,进入下载管理,手动继续下载,否则更新包会被自动解包更新到系统中去。

但是这类更新包是加密状态的,需要使用工具解密。

手机端

手机端的解密方法参考了 XDA 上的教程刷入打过 Magisk 补丁的boot.img还是需要用电脑),步骤如下:

  1. 下载 Termux(Play 商店 / 酷安
  2. 下载 payload_dumper(GitHub)并解压
  3. 解压下载系统更新包,将解压出来的payload.bin放入payload_dumper文件夹中
  4. 打开 Termux,执行命令
pkg install python -y
pip install --upgrade pip
apt update && apt upgrade -y
termux-setup-storage

执行到这一步会弹出提示,同意即可。


找到解压后的 payload_dumper 文件夹,长按该文件夹,点击更多 → 详情,复制该文件夹位置

比如我的 payload_dumper 文件夹位置是在/storage/emulated/0/payload_dumper,那么接下来在 Termux 的操作指令应该是

cd /storage/emulated/0/payload_dumper
pip install -r requirements.txt
python payload_dumper.py payload.bin

等待解包结束,就可以在payload_dumper/output文件夹中找到boot.img

PC端

PC端的刷入方法参考了酷安教程

  1. payload.bin解压出来
  2. 下载解密工具:传送门,并解压
  3. payload.bin放到payload_input文件夹中
  4. 运行payload_dumper.exe
  5. 由于只需要boot.img,所以不用等全程走完,看到boot.img解压出来就可以把程序关掉

刷入 Magisk

1. 安装 Magisk

下载 Magisk Manager(GitHub / 备份)安装并打开,可能会因为网络原因无法正常加载相关信息。


可以打开右上角设置,点击「更新通道」将其修改为自定义,然后在网上搜索「Magisk自定义通道」,找个能用的填入自定义通道中。可以使用我的:https://zui.moe/magisk/stable.json ,目前为稳定版23.0,不过不保证能持续更新。(懒得维护网上搜现成的吧)

设置之后应该就可以正常加载了。

2. 修补 boot.img

然后点击 Magisk 旁边的安装。


选择「选择并修补一个文件」。

找到刚才解密出来的boot.img并选中,点击开始。

打过 Magisk 补丁的boot.img放在/Download文件夹下。

3. 刷入 boot.img

将修补过后的magisk_patched_xxxxx.img复制到电脑,准备开始刷 Magisk,刷入方法参考了酷安教程。刷机需要使用到 adb 工具(传送门),注意解压。

在开机状态下,将手机连接至电脑。双击 adb 工具中的打开CMD命令行.bat

以下命令需要手机上开启「USB 调试」,命令的含义上图中都有说明,不再解释了。

adb devices

需要成功列出 adb 设备才行,失败的话检查驱动、数据线、电脑接口,一一排查。

adb reboot bootloader

重启到 fastboot 模式后,手机显示的是一只维修机器人的米兔。然后就可以刷入打过补丁的boot.img了。由于修补过后的magisk_patched_xxxxx.img名字每次都不一样,建议直接拖动,可以参考我之前做的动图。注意命令中的空格。

fastboot flash boot_ab magisk_patched_xxxxx.img

刷入成功后,输入fastboot reboot重启设备,没有意外的话就可以看到已经成功激活的 Magisk 了。

4. 后续系统更新

之后的更新系统,就不用像第一次这么繁琐地提取boot.img打补丁再刷入系统之中了。只是需要在更新新版本时,选择「下载完整更新包」。

然后等待更新包写入系统后,提示「重启完成更新」后,不要急着更新,这时候打开 Magisk,选择「安装到未使用的槽位(OTA 后)」,点击确定。


等待刷入完成。

重启系统,就更新完了。

或者,不用下载完整包也可以。在下载增量包前,先在magisk里点击「卸载Magisk」,选择「还原原厂映像」。

然后再增量更新。更新完成后,不要重启,和上面一样,安装 Magisk,选择「安装到未使用的槽位(OTA 后)」,再重启系统。

刷入 TWRP

官方 TWRP 现已正式推出,刷入方法与刷 Magisk 几乎一致。但是,由于小米 11 目前没什么能用的包,这里不建议刷 TWRP。

如果需要可以自行前往 TWRP 官网下载。

刷入方法为在 adb 中命令行刷入。

adb reboot bootloader
fastboot boot twrp.img

magisk 打补丁其实也挺不错的。

一些问题

1. SafetyNet 无法通过

刷了 Magisk 后,SafetyNet 检测就无法通过。无法通过的话,Google Play 保证机制就无法通过,有些游戏就下载不了。

解决方法是:使用下面这两个模块

  1. safetynet-fix
  2. XiaomiCTSPass

在magisk中刷入,重启。就可以欺骗系统通过这一检测,使证明通过。(测试系统版本为开发版MIUI 12.5 21.3.25)

Play 商店的话,清除数据就行。

注意开启 magisk hide。

2. Magisk模块出现问题导致手机卡死

停用所有模块即可。

手机连接电脑,打开 adb 工具,输入adb shell,提示成功连接后会出现venus:/的字样,再输入magisk --remove-modules,手机会自动重启,卡得没法重启,就长按开机键强制重启。

然后挨个排查,看看是哪个模块出现的问题。

一定要注意开启USB调试,否则只能靠刷回原厂镜像才能解决。具体可以参考:Magisk Frequently Asked Questions

MIUI13(Android12)

基于 Android12 的 MIUI13 也是可以直接用 Magisk 给 boot 打补丁的,只是 Magisk 需要使用支持 Android12 的Canary版本。

你可以点击 这里 下载 GitHub 实时构建的版本,或是访问 这里 下载我存档的备份。

如果用的还是v23版本,安装完Canary版的 App 后,应用会提示更新 Magisk,安装时选择「直接安装(推荐)」,重启后,再更新到 MIUI13。


  1. 以上关于「virtual A/B」分区的概念,是根据秋叶随风大佬的酷安动态简单概括得来的,其中可能有些遗漏或是错误,还请谅解。