OnePlus刷Magisk
前言
两年多前搞了个一加9的手机,就是冲着可以解锁oem刷机去的,然后到手就给刷了氧os+magisk,当时理解比较粗浅,不知道咋更新系统,以为每次更新都要重刷magisk太麻烦了就很久没更新。
后来想着一直不更新也不是个事,然后开始研究怎么更新系统同时保留magisk,这里总结一下流程和坑。
TLDR:只是OnePlus的流程,别的厂商的手机过程可能略有不同。
- 如果没有解锁bootloader,跳转到
google搜索如何解锁bootloader
- 如果有对应系统的boot.img,通常在全量包中可以找到,跳转到3。
- 如果没有boot.img,搜索如何刷入全量包,并刷入一个网上现有的全量包,同时从全量包中提取boot.img。
- 将boot.img上传到手机内。
- 如果有magisk app,跳转到6。
- 如果没有magisk app,安装一个,安装包在github下载。
- 使用magisk app,安装,选择并修补一个文件,选择之前上传的boot.img。
- 将magisk修补完成的文件拷贝到电脑上。
- 使用
adb reboot bootloader
进入fastboot。 - 使用
fastboot boot magisk_patch_xxxxx_xxxxx.img
进入临时的magisk环境。 - 在magisk app里,安装,直接安装,重启。
- 成功。
下面是小故事。
更新系统
搜了下发现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 | fastboot getvar current-slot |
火速刷上,绝赞开不了机。
卡一屏了,开也开不了,关也关不了,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选择直接安装。再重启就可以正常更新了。