Sorry, this page is not available in English yet.

Nexus 6/9 及以后的 Nexus 设备的 Bootloader 解锁机制及问题

如果您给谷歌与设备制造商合作设计制造的 Nexus 系列设备刷机,那么您一定不会对 Bootloader 锁(以下简称 BL 锁)和 fastboot 工具陌生。作为从 Nexus One 就开始引入的机制,如果希望在 Nexus 设备上刷写任何固件,包括官方的以及非官方的,都需要先使用 fastboot 解开 BL 锁才可以刷,否则无法刷入。(XDA 论坛上有人说在一些早期型号的 Nexus 上无须解锁也可以刷入谷歌放出的原厂固件,但因为我也没有那些老设备,无法考证)

直到 Nexus 5,解 BL 锁都只有一个大步骤:在设备进入了 fastboot 模式并连接到电脑的前提下,电脑上使用 fastboot 工具输入简简单单的一行解锁命令,设备就解锁了。

从 Nexus 6 和 Nexus 9 这一代设备开始,解锁的步骤就又加了一步:需要先在系统中的开发者选项里勾选一个叫做“允许 OEM 解锁”的选项,然后才能按照以前的步骤解锁。如果没勾选这个选项,解锁请求是会被拒绝的。此外,也没有任何其它方法能够调用这个选项。

开发者选项中的“允许 OEM 解锁”选项

谷歌设计这个机制的一大目的就是为了提高“安全性”:假如用户的设备丢失或被盗,他人获得设备后,只要机主设了密码而且没有在开发者选项中勾选允许 OEM 解锁,就不能对设备进行刷机或任何修改。毕竟不能进入设置应用开启这个选项,也不能解 BL 锁。加上从 Android 5.1 开始引入的设备保护机制,在重置设备后,需要用重置前在设备上登录的帐户来激活设备才能使用,因此获得设备的人恢复出厂设置也不能使用设备。因此,就算设备丢失或被盗,也不能被重新使用。

您可能觉得,谷歌新设计的解锁步骤也就是先在系统里勾一个选项再解锁吗,不算麻烦啊。当然了,并不是说这有多麻烦,而是谷歌设计的这种解锁机制造成了不少人的手机变砖。

变砖

自从 Android 5.0 起,Nexus 设备 OTA 更新失败变砖的事故数量也开始不断上升了。有一些用户反映,他们在设备上接到 OTA 更新之后,重启安装时出现错误,显示安卓机器人倒地、肚子上有一个红色感叹号三角的图标。出现错误后,系统也无法正常启动。

关于这个错误的原因,现在还无法确定。有的人(主要是谷歌脑残粉等)否认正常接收 OTA 变砖的事实,称所有这种变砖都是因为,在墙内更新重启后,开机没有第一时间翻出去墙,然后又收到了相同的更新,下载后重启。假设我们正在安装 6.0 到 6.0.1 的更新吧,下载的更新包是只能从 6.0 更新到 6.0.1 的,在系统已经是 6.0.1 的情况下再安装到 6.0.1 的更新,就产生了错误,然后变砖。但是,在老外的 XDA 论坛上,也有不少有这问题的。显然他们在开机后可以第一时间直接连接谷歌的服务器,但依然还有不少设备出现这种问题的人,更何况很多都是并没有重复更新,只是点一次更新就砖了。我们也很难确定到底是什么原因造成 OTA 更新变砖。

倘若用户在更新变砖前没有勾选“允许 OEM 解锁”,他们就不能解开设备的 BL 锁,因为无法进入系统勾选这个选项。

除此之外,还有一部分人,已经正确地解锁设备后,将设备重新上了 BL 锁后,无法启动系统。这种情况一般发生在重新上 BL 锁前设备上刷入了第三方 recovery 的机器。倘若用户在重锁前取消勾选了“允许 OEM 解锁”选项,又在上述情况下锁了 BL,那么他们就无法进入系统勾选允许解锁的选项,也无法再重新解锁。这是因为,从 Nexus 6/9 这一代开始,重锁 BL 和解锁一样,也将强制清除数据。清除数据的指令只有原生的 recovery 才能正确识别并执行,TWRP 等第三方 recovery 无法执行;在没有完成数据清除前,不会启动系统,也就不能再去勾选允许解锁的选项,更不能重新解锁 BL 救砖。

绝大多数的变砖、无限重启等,都可以通过刷入谷歌官方的原厂固件来救回。但是,请注意这样做的前提条件:Bootloader 必须已解锁。上述的设备变砖的情况,因为用户没有勾选开发者选项里的允许解锁,进入 fastboot 后输入解锁指令会被拒绝,不能解锁;又没法进入系统勾选该选项,也没有任何其它办法来调用该选项。

本来是为了所谓的“安全性”考量,结果导致用户遇到问题时不能恢复设备的固件。更可怕的是,这些问题在用户正常使用设备,不刷机不折腾,正常更新系统,完全遵循保修条款的情况下,都会出现。

幸好,谷歌后来在网站上放出了可用于救砖的完整 OTA 更新包,无须解锁,只需要一根数据线,进入设备自带的 recovery,就可以救砖了。

救砖

这里下载适用于您的设备的最新的完整 OTA 更新包,然后进入设备的 recovery,使用 adb sideload 重新安装一遍系统更新即可。具体的过程,网上有很多教程都有介绍,这里也不再赘述。此过程不会导致设备上的数据丢失。

注意:完整 OTA 更新包不支持系统降级。如果您尝试刷入的系统比当前设备上的系统旧,设备会报错无法刷入。因此,请记得下载最新的更新包。

预防

在谷歌释出完整 OTA 更新包前,此问题几乎是无解的。但现在可以轻松恢复系统,数据也不会受到影响,因此没有必要采取预防措施。

对于已经解锁的用户:请不要轻易重新给您设备的 Bootloader 上锁,除非您清楚究竟该怎么做才能确保重上 BL 锁后不会导致设备变砖。XDA 论坛上有人在没有正确重锁 BL 后遭遇设备不能启动还不能解锁的惨痛经历,都是血淋淋的教训。