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」分区只保留一个,以解决上述空间占用问题。
小米 11 也是使用的「virtual A/B」,可这对我来说并不是什么好消息。因为「virtual A/B」删除了「recovery」分区,没有了「recovery」分区就不能刷入第三方「recovery」。因此在 TWRP 官方解决为这类新分区方式刷入第三方 recovery 之前,我只能使用其他方法来为小米 11 刷机了。
不过我这也算不上啥刷机,只是安装一个 Magisk 而已。这篇文章也会等到能刷上 TWRP 的时候,再继续更新。
刷机有风险,搞机需谨慎,请准备好备用机,做好变砖的心理准备。在确定当地有小米之家可进行售后维修后,再进行刷机操作。
以下是完整的刷机记录。
解锁
到手的手机还是出厂系统,先把系统更新到最新版本。我使用的是 MIUI 12.0.22.0 稳定版本,体验上还不赖。当然不想更新也没啥问题。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970283-c4ca4238a0b9238.jpg)
1. 启用开发者模式
刚到手的手机,先登录自己的小米账号,然后在设置中打开「开发者模式」。
MIUI 12 系统开启「开发者模式」的步骤是:设置 → 我的设备 → 全部参数,点按「MIUI 版本」七次,会有提示弹出「开发者模式已开启」。
设置「开发者模式」的入口在:设置 → 更多设置 → 开发者选项。勾选「OEM 解锁」、「USB 调试」。在「设备解锁状态」中,绑定账号与设备。
2. 下载解锁工具
前往「解锁小米手机」页面下载解锁工具。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970292-c81e728d9d4c2f6.png)
3. 更新驱动
为了避免解锁或是刷机时出现各种不可预测的危险,先更新好驱动。把下载好的压缩包解压,点击 miflash_unlock.exe
打开解锁工具。
点击右上角设置。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970297-eccbc87e4b5ce2f.png)
在将手机连接到电脑前,一定要先在「开发者模式」里打开「USB 调试」,弹出类似「允许此电脑使用 USB 调试」的字样,然后再点击「驱动检测」更新驱动。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970302-a87ff679a2f3e71.png)
4. 解锁
然后就可以解锁了。注意解锁会清除所有手机数据,所以不要急着往新手机里转移数据。解锁这个过程解锁工具会有提示,就跳过了。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970307-e4da3b7fbbce234.png)
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970312-1679091c5a880fa.png)
不过一直有听说新手机解锁的话,需要绑定一段时间(大概是七天)的小米账号才行,但我手机一到手就解锁了……
解锁完后会自动重启,数据会被清空。
提取boot.img
目前刷机的目的仅是刷入 Magisk,Magisk 可以通过修补系统 boot.img
的方式刷入,毋需使用 TWRP 或是其他第三方 REC 工具刷入。
所以需要先提取当前系统的原始 boot.img
文件。
利用线刷包提取
在小米社区中看看有没有手机当前系统版本的线刷包,下载下来,解压之后,就有 boot.img
,可以直接使用。只不过目前只有 MIUI 12 稳定版本的线刷包。
利用卡刷包(手机系统更新包)提取
小米社区还未提供当前使用版本的线刷包的话,也可以在手机系统更新中下载完整卡刷包。首先进入系统更新中点击下载完整更新包,下载开始后把后台全关闭,进入下载管理,手动继续下载,否则更新包会被自动解包更新到系统中去。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970321-8f14e45fceea167.jpg)
但是这类更新包是加密状态的,需要使用工具解密。
手机端
手机端的解密方法参考了 XDA 上的教程(刷入打过 Magisk 补丁的 boot.img
还是需要用电脑),步骤如下:
- 下载 Termux(Play 商店 / 酷安)
- 下载 payload_dumper(GitHub)并解压
- 解压下载系统更新包,将解压出来的
payload.bin
放入payload_dumper
文件夹中 - 打开 Termux,执行命令
pkg install python -y
pip install --upgrade pip
apt update && apt upgrade -y
termux-setup-storage
执行到这一步会弹出提示,同意即可。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970337-c9f0f895fb98ab9.jpg)
找到解压后的 payload_dumper 文件夹,长按该文件夹,点击更多 → 详情,复制该文件夹位置。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970341-45c48cce2e2d7fb.jpg)
比如我的 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 端的刷入方法参考了酷安教程。
- 把
payload.bin
解压出来 - 下载解密工具:传送门,并解压
- 将
payload.bin
放到payload_input
文件夹中 - 运行
payload_dumper.exe
- 由于只需要
boot.img
,所以不用等全程走完,看到boot.img
解压出来就可以把程序关掉
刷入 Magisk
1. 安装 Magisk
下载 Magisk Manager(GitHub / 备份)安装并打开,可能会因为网络原因无法正常加载相关信息。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970348-d3d9446802a4425.jpg)
可以打开右上角设置,点击「更新通道」将其修改为自定义,然后在网上搜索「Magisk自定义通道」,找个能用的填入自定义通道中。可以使用我的:https://zui.moe/magisk/stable.json ,目前为稳定版23.0
,不过不保证能持续更新。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970355-6512bd43d9caa6e.jpg)
设置之后应该就可以正常加载了。
2. 修补 boot.img
然后点击 Magisk 旁边的安装。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970379-c20ad4d76fe9775.jpg)
选择「选择并修补一个文件」。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970384-c51ce410c124a10.jpg)
找到刚才解密出来的boot.img
并选中,点击开始。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970391-aab3238922bcc25.jpg)
打过 Magisk 补丁的 boot.img
放在 /Download
文件夹下。
3. 刷入 boot.img
将修补过后的 magisk_patched_xxxxx.img
复制到电脑,准备开始刷 Magisk,刷入方法参考了酷安教程。刷机需要使用到 adb 工具(传送门),注意解压。
在开机状态下,将手机连接至电脑。双击 adb 工具中的打开CMD命令行.bat
。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970397-9bf31c7ff062936.png)
以下命令需要手机上开启「USB 调试」,命令的含义上图中都有说明,不再解释了。
adb devices
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970404-c74d97b01eae257.png)
需要成功列出 adb 设备才行,失败的话检查驱动、数据线、电脑接口,一一排查。
adb reboot bootloader
重启到 fastboot 模式后,手机显示的是一只维修机器人的米兔。然后就可以刷入打过补丁的 boot.img
了。由于修补过后的 magisk_patched_xxxxx.img
名字每次都不一样,建议直接拖动,可以参考我之前做的动图。注意命令中的空格。
fastboot flash boot_a magisk_patched_xxxxx.img
fastboot flash boot_b magisk_patched_xxxxx.img
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970413-70efdf2ec9b0860.gif)
刷入成功后,输入 fastboot reboot
重启设备,没有意外的话就可以看到已经成功激活的 Magisk 了。
4. 后续系统更新
之后的更新系统,就不用像第一次这么繁琐地提取 boot.img
打补丁再刷入系统之中了。只是需要在更新新版本时,选择「下载完整更新包」。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970528-6f4922f45568161.jpg)
然后等待更新包写入系统后,提示「重启完成更新」后,不要急着更新,这时候打开 Magisk,选择「安装到未使用的槽位(OTA 后)」,点击确定。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970437-1f0e3dad9990834.jpg)
等待刷入完成。
![](https://static.himiku.com/2021/03/18/30aa6c1f349ec.jpg#vwid=1440&vhei=819)
重启系统,就更新完了。
或者,不用下载完整包也可以。在下载增量包前,先在 magisk 里点击「卸载 Magisk」,选择「还原原厂镜像」。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970456-98f13708210194c.jpg)
然后再增量更新。更新完成后,不要重启,和上面一样,安装 Magisk,选择「安装到未使用的槽位(OTA 后)」,再重启系统。
刷入 TWRP
目前已有尝鲜版 TWRP,可以在微博上查看发布信息。但并非开源(付费),且刷入方法相对麻烦些,加上第三方 ROM 不多,可以自己刷着玩玩,但没有必要一定得刷 TWRP。
一些问题
1. SafetyNet 无法通过
刷了 Magisk 后,SafetyNet 检测就无法通过。无法通过的话,Google Play 保证机制就无法通过,有些游戏就下载不了。
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970541-b6d767d2f8ed5d2.jpg)
解决方法是:使用下面这两个模块
在 magisk 中刷入,重启。就可以欺骗系统通过这一检测,使证明通过。(测试系统版本为开发版 MIUI 12.5 21.3.25)
![](https://static.iapkk.com/wp-content/uploads/2022/01/1641970549-37693cfc748049e.jpg)
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 实时构建的版本,或是访问 这里 下载我存档的备份。
本文作者:mikusa