记一次刷机历程
2020 年 2 月 27 日,我成功地将 Lineage OS 16 刷入我的 OnePlus 6 中。
万事开头难
25 号的晚上至 26 号的凌晨,我尝试通过参照 Lineage OS 官网的 Wiki 来将 ROM 刷入我的一加 6 中,结果失败了。虽然我早就做好了心理准备,但是没想到我连 TWRP 都进不去。后面才了解到,一加 6 采用了前所未有的 A/B 分区结构,这使得相对其他非 A/B 分区结构的手机,一加 6 刷机的难度更大,操作更加复杂。
我一开始是参照 Wiki 刷入 TWRP 的,逐一执行命令:fastboot set_active a和fastboot flash boot_a <recovery_filename>.img,然后重启至 recovery 的时候手机就卡住了。当时心里想着如果要出什么问题的话怎么也得等到刷入 ROM 重启至系统的时候再出吧,结果刚起跑就摔倒了。随后也都有尝试单独执行fastboot set_active b和fastboot flash boot_b <recovery_filename>.img以及 a 和 b 一起刷的,但是都没用,这期间也在持续百度和 Google ,全都无果。最后狼狈地跑到 Reddit 发帖求助,一直到凌晨 3 点钟才上床睡觉,闭上眼睛的同时感到非常无助和绝望。
中间难
早上起来,看到在 Reddit 发的贴子有人回复了,其大致意思就是:「就算是一加 6 最新的 TWRP ,亦都有可能无法运行在 Android 10 上。」这么说来,尽管昨晚折腾了很久,但很有可能就是在瞎折腾。热心网友还向我推荐了 XDA 的一个大佬,说是他有合适的 TWRP 。看到这里着实是感到了一丝希望,也有了大致的前进方向。
晚上来到 XDA 后利用我的聪明才智和这么多年来对电脑的操作经验,我很快找到了这个作者以及他发布 TWRP 的帖子,事不宜迟立刻下载尝试。经过一天的阅览和学习,我意识到了其实还可以直接使用fastboot flash boot <recovery_filename>.img和fastboot boot <recovery_filename>.img这两条命令而不再加上 a 或 b 分区来重启至 recovery ,不过这貌似也不是什么重点……
在我执行命令并重启至 recovery 的过程中,一切都和昨晚没什么区别。然而这一次,手机在重启到了带有黄色感叹号的界面后,在我紧张焦虑地注视下,TWRP 的 logo 出现了!这也意味着我成功地进入了 TWRP 。在一阵狂喜后,我接着参照 Wiki 的指示对数据进行格式化:Format Data 和擦除 System 分区的数据,然后就到最关键的一步——利用 Sideload 来安装系统包,结果不出意外地又出意外了。当我执行adb sideload filename.zip命令后,电脑上的命令提示符显示了一个百分比,然而当它跑到 47% 左右的时候,Sideload 就自动关闭了,随后命令提示符就会显示:
Total Xfer 1.00x
我不知道这是什么意思,我只知道这应该不是成功的意思。
在反复尝试了多次依旧无果后,我就又开始到处去寻找解决方案。最后是在 Wiki 中的一个对如何安装 GApps 的进行说明的文档页面里找到了答案:安装 GApps ,需要通过adb push filename.zip /sdcard/这条命令先将 GApps 的包传输到 SD 卡里,然后再进入 TWRP 的安装界面选择其进行安装。尽管这个页面描述的是 GApps 的安装方法,尽管我不知道这条命令跟 Sideload 有什么区别,但我感觉相同的操作放在安装系统 ROM 上是一样的……
果然,我的直觉是对的,前面提到的方法真的可以将 ROM 包刷入。并且这次是 TWRP 显示成功的,不是我说的。成功了自然是要重启手机,结果不出意外地又出意外了。手机在重启过程中,先是出现 Android 的 logo ,然后是一个带有黄色感叹号的界面,紧接着手机就黑屏了,到这里我人都傻了,黑屏以后又自动重启到 Fastboot Mode 。这是一个循环,无论开关机多少次都是这样。没办法了,去 Reddit 报喜的同时还得报忧……
结尾难
又是凌晨两点才睡,早上九点才醒,醒了第一件事就是去 Reddit 看看有没有高人为我指一条路——然而这一次却没人回复我了,心里想着看来还得靠自己去找答案了。
午饭过后通过 Google 找到一篇文章,主要内容就是教你怎么给 OnePlus 6 安装 Lineage OS 16 ,写得非常详细,还配有图片,每一步不仅告诉你该怎么做,还会给你解释为什么这么做……看来天无绝人之路,好戏才刚刚开始。
在用我的工地英语把文章整体看过一遍以后就准备动手照做了。不过请允许我再解释一下:在此之前,关于为什么手机开机不进系统而只会进到 Fastboot Mode 我其实已经大概有个头绪了。简单来说,很有可能就是系统缺斤少两了,比如该打的驱动没打上之类的。在后续阅读文章的过程中,我也注意到作者提到了一点:「Lineage OS 虽然自称是个 OS ,然而它并不具备一个完整的操作系统该有的模块。」这个结论在我在一加官网把氢 OS 的包下载下来并把它和 Lineage OS 的包的体积进行对比后得到了验证:氢OS 9.0.7 全量包的大小有将近两个 GB ,而lineage-16.0-20200223-nightly-enchilada-signed.zip的大小只有 486 MB。所以在参照文章指导的情况下,我现在要做的第一件事就是去一加的官网下载当时发布的 Android P 的最后稳定版本,并用它来作底包,然后再刷入 Lineage OS 。只有这样,系统才不会缺少必要的模块,才能正常开机运行。
在阅读文章的过程中我还了解到,对于 A/B 分区的设备来说,一个包在安装时并不会被安装到当前所在的槽。也就是说,如果现在处在 A 槽,那么这个包将被安装到 B 槽中,这和大多数操作的效果是相反的。例如,在执行擦除 System 分区数据的操作时,受影响的就是当前槽的 System 分区,而另外一个槽是不受影响的。这个设定让我大开眼界,作者的说明让我茅塞顿开。按照文章的指导,接下来,当在我刷入底包以后,我需要做的就是切换至另一个槽,即底包所在的槽,对其执行擦除 System 分区的操作。这样一来,底包中的驱动等必要文件会得到保留,而单独把系统抹掉,又可以让我在后续刷入新的系统,这一切就说得通了。随后,我再按照类似的操作,把另一个槽也刷上底包并清除 System 分区,最后再把 Lineage OS 的 ROM 包分别刷入两个槽即可。
刷入 Lineage OS 以后,还要同时刷入 TWRP ,这是一个强大的 recovery ,此时刷入,将使其在手机的两槽上永久可用,同时在重启时,TWRP 还会隐式地为我们交换槽。最后如若有需要,可以再次重启至 TWRP ,进行 GApps 刷入以及对手机进行 Root 。
在进行完所有的工作以后就可以重启至系统了,最终,功夫不负有心人,我成功看到了 Lineage OS 的开机动画,直接原地起飞好吧。
收尾
终于写到这里了。这次刷机,可以说是搞机生涯中的一个里程碑,因为我遇到并尝试去解决了很多问题。其实我完全可以不去折腾,氢OS 也用得好好的,我完全没必要吃饱没事干去把手机搞坏,而且就算我把手机整得不能正常开机了,我也完全可以把它返修,虽然过了保修期,不过我想他们帮我刷个系统无非就是点钱的事情,加上走顺丰快递,今天去明天回,也耽误不了太多时间。但是我并没有这么做,系统进不去了,但是 Fastboot Mode 还能进,我知道我还没有彻底失败。
其实我前段时间也有为一台 三星 Note 3 刷入 Lineage OS ,那是一台 2013 年的机器,而一加 6 是 2018 年的。这两者的区别就在于一加 6 是 A/B 分区的机器,而 A/B 分区说不定将会是未来安卓手机都会采用的技术,因为它从用户体验的角度来说真的很不错。我在一开始买回一加 6 进行 OTA 的时候就注意到了,它在下载完更新包后是可以直接安装的,安装过程在后台进行,安装期间你仍然可以去干别的事,例如回复 QQ 消息。在更新包安装完成后再重启手机就行了。而像我以前的手机,例如红米 1S ,当时更新系统是下载完更新包后就得关机更新了。
现如今我终于学会了如何给 A/B 分区结构的机器刷机(无论将来是否能派上用场),但是如果我不去折腾,或者是折腾坏了就直接返修,那这就是另一个故事了。
我觉得无论是在什么行业做什么,都应该要带有一点折腾的精神。折腾,它一定会需要投入大量的时间和精力,并且不一定有所回报。但是如果没有折腾,或许就不会有进步。因为如果做一件事情毫不费力,那一定就是在浪费时间。