OnePlus刷Magisk

前言

两年多前搞了个一加9的手机,就是冲着可以解锁oem刷机去的,然后到手就给刷了氧os+magisk,当时理解比较粗浅,不知道咋更新系统,以为每次更新都要重刷magisk太麻烦了就很久没更新。

后来想着一直不更新也不是个事,然后开始研究怎么更新系统同时保留magisk,这里总结一下流程和坑。

TLDR:只是OnePlus的流程,别的厂商的手机过程可能略有不同。

  1. 如果没有解锁bootloader,跳转到google搜索如何解锁bootloader
  2. 如果有对应系统的boot.img,通常在全量包中可以找到,跳转到3。
  3. 如果没有boot.img,搜索如何刷入全量包,并刷入一个网上现有的全量包,同时从全量包中提取boot.img。
  4. 将boot.img上传到手机内。
  5. 如果有magisk app,跳转到6。
  6. 如果没有magisk app,安装一个,安装包在github下载。
  7. 使用magisk app,安装,选择并修补一个文件,选择之前上传的boot.img。
  8. 将magisk修补完成的文件拷贝到电脑上。
  9. 使用adb reboot bootloader进入fastboot。
  10. 使用fastboot boot magisk_patch_xxxxx_xxxxx.img进入临时的magisk环境。
  11. 在magisk app里,安装,直接安装,重启。
  12. 成功。

下面是小故事。

更新系统

搜了下发现magisk有个patch OTA的功能,原理是因为现在android系统大部分都是双槽位的,平时系统启动正常运行在一个槽位,如果有更新的话,系统会把更新应用到另一个未启用的槽位,然后在机器下一次重启的时候切换到另一个槽位启动,完成系统更新。

然后magisk会在系统更新完成另一个槽位之后,将另一个槽位里的操作系统修改了,这样重启之后的新系统也有magisk。但是这里要注意,在系统更新完成之后,一定要先用magisk patch OTA修改另一个槽位再重启,不然手贱先重启了,那magisk就丢了,重刷吧。

然后用这个方法一路更新,畅通无阻,直到到了某一个系统版本。

系统更新失败了。。不知道为啥,感觉是magisk给系统搞烂了,等magisk更新吧。

然后等magisk更新,前几天发现更新了点小版本,然后又试着更新了下系统,然后还是失败。然后想着别人应该也有类似问题吧,搜一下。

然后发现magisk的uninstall里有个恢复原厂镜像的功能,这个功能会把另一个槽位换回原版的系统,切换回来之后系统就能正常更新了。

然后又一路更新,直到某一个版本。之前的版本都是点击“安装更新”,系统会更新另一个槽位的文件,点击“重启”会reboot系统。这个版本开始,点击更新之后,下载更新,解压更新,到了这一步就是再更新另一个槽位的文件了。然后点击“安装更新”,就直接重启了。。。我还以为和之前系统一样,点了安装更新看它重启直接人傻了。

什么sb一加。

重刷magisk

算了,烂就烂了吧,搞不定只能重刷了。

然后凭借自己稀烂的记忆开始重刷,踩了不少坑,有几次都以为变砖了,这里记录一下,免得之后又忘了。

查下手册,先patch文件,找了下手机里有个之前老旧版本的安装包,用magisk修补文件,成了,没问题。

然后要进fastboot刷进去,试下adb reboot fastboot,嗯?怎么要我选语言,感觉和之前不太一样?fastboot devices也找不到设备。

然后xjb点点点还点进了9008模式,这是高通的深度刷机模式,fastboot没了也能救回来,但是当时不知道,手机黑了开也开不了,关也关不了,以为变砖了。后来搜到了这是9008模式,可以上高通救砖包救,误入的话可以音量键+电源键按住5s左右,会重新进入正常的启动流程。

然后发现adb reboot fastboot进的是fastbootd。是一个用户层的一个工具,并不是fastboot模式。进fastboot模式正确姿势是adb reboot bootloader

然后fastboot还是找不到设备,后来想起来了,自己之前也遇到了这个问题,是因为windows的驱动问题,找了一下好像没有靠谱的驱动,没找到google官方的驱动,就没下了,转而是用的Linux虚拟机来刷机。

然后之前不是patch成功了一个文件吗,进fastboot给他刷上去试试。

1
2
3
fastboot getvar current-slot
fastboot flash boot[_x] magisk_patch_xxxx.img # _x是前一条命令返回的结果,需要刷在current active的槽里。
fastboot reboot

火速刷上,绝赞开不了机。

卡一屏了,开也开不了,关也关不了,fastboot也进不了了,又以为变砖了。因为关不了机所以进不了fastboot,一种解决方法是放到手机没电关机,再插电开机进fastboot。但是折腾一下发现音量加+电源键可以强制重启,然后在重启还没进一屏的时候快速按下音量减+电源键,成功进入fastboot。

吃一堑长一智,fastboot flash之前一定先用fastboot boot试一下,fastboot boot起不来只要重启系统还是好的,flash上去起不来就只能再进fastboot重刷了。

进了fastboot就安心了,然后想了想发现自己是sb,boot.img和自己手机当前系统完全不匹配,刷上去能跑才是奇迹。现在就需要一个我手机原版系统版本的boot.img,刷上去应该就能进系统了。然后搜了下发现一个神奇的网站,https://magiskcn.com/oneplus-magisk,里面有各个版本的系统全量升级包,之前还在尝试抓包从官网扣全量升级包,这下方便了。

根据记忆,刷之前的系统是升到了F.78的版本,然后直接找到对应的升级包,把payload.bin解压出来,用payload-dumper-go-64把boot.img解出来。fastboot刷上去,绝赞进入系统,之后就没啥说的了,adb把boot.img丢到手机里,magisk patch一下,fastboot重新刷上去。

然后再升级的发现magisk报错,提示备份不存在,搜了下,发现姿势不太对,应该是fastboot把原厂镜像刷回去,再用fastboot boot从patch之后的镜像启动,之后在临时的magisk环境里用magisk app,install选择直接安装。再重启就可以正常更新了。