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 稳定版本,体验上还不赖。当然不想更新也没啥问题。
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
还是需要用电脑),步骤如下:
- 下载 termux( / )
- 下载 payload_dumper()并解压
- 解压下载系统更新包,将解压出来的
payload.bin
放入payload_dumper
文件夹中 - 打开 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 端的刷入方法参考了。
- 把
payload.bin
解压出来 - 下载解密工具:,并解压
- 将
payload.bin
放到payload_input
文件夹中 - 运行
payload_dumper.exe
- 由于只需要
boot.img
,所以不用等全程走完,看到boot.img
解压出来就可以把程序关掉
刷入 magisk
1. 安装 magisk
下载 magisk manager( / )安装并打开,可能会因为网络原因无法正常加载相关信息。
可以打开右上角设置,点击「更新通道」将其修改为自定义,然后在网上搜索「magisk自定义通道」,找个能用的填入自定义通道中。可以使用我的: ,目前为稳定版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_a magisk_patched_xxxxx.img
fastboot flash boot_b magisk_patched_xxxxx.img
刷入成功后,输入 fastboot reboot
重启设备,没有意外的话就可以看到已经成功激活的 magisk 了。
4. 后续系统更新
之后的更新系统,就不用像第一次这么繁琐地提取 boot.img
打补丁再刷入系统之中了。只是需要在更新新版本时,选择「下载完整更新包」。
然后等待更新包写入系统后,提示「重启完成更新」后,不要急着更新,这时候打开 magisk,选择「安装到未使用的槽位(ota 后)」,点击确定。
等待刷入完成。
重启系统,就更新完了。
或者,不用下载完整包也可以。在下载增量包前,先在 magisk 里点击「卸载 magisk」,选择「还原原厂镜像」。
然后再增量更新。更新完成后,不要重启,和上面一样,安装 magisk,选择「安装到未使用的槽位(ota 后)」,再重启系统。
刷入 twrp
目前已有尝鲜版 twrp,可以在上查看发布信息。但并非开源(付费),且刷入方法相对麻烦些,加上第三方 rom 不多,可以自己刷着玩玩,但没有必要一定得刷 twrp。
一些问题
1. safetynet 无法通过
刷了 magisk 后,safetynet 检测就无法通过。无法通过的话,google play 保证机制就无法通过,有些游戏就下载不了。
解决方法是:使用下面这两个模块
在 magisk 中刷入,重启。就可以欺骗系统通过这一检测,使证明通过。(测试系统版本为开发版 miui 12.5 21.3.25)
play 商店的话,清除数据就行。
注意开启 magisk hide。
2. magisk模块出现问题导致手机卡死
停用所有模块即可。
手机连接电脑,打开 adb 工具,输入 adb shell
,提示成功连接后会出现 venus:/
的字样,再输入 magisk --remove-modules
,手机会自动重启,卡得没法重启,就长按开机键强制重启。
然后挨个排查,看看是哪个模块出现的问题。
一定要注意开启 usb 调试,否则只能靠刷回原厂镜像才能解决。具体可以参考:magisk 。
关于 miui13(android12)
基于 android12 的 miui13 也是可以直接用 magisk 给 boot 打补丁的,只是 magisk 需要使用支持 android12 的 canary
版本。
你可以点击 下载 github 实时构建的版本,或是访问 下载我存档的备份。
- 以上关于「virtual a/b」分区的概念,是根据秋叶随风大佬的简单概括得来的,其中可能有些遗漏或是错误,还请谅解。
本文作者:
本文链接:
封面出处: