当你在没有退出 Google 帐号就刷机的情况下,只是通过 TWRP 直接格式化手机或者是刷了 OpenGapps 后可能会遇到无法跳过开机向导的情况。具体来说,也就是触发了 Android 的 FRP(Factory Reset Protection)机制,详情如下:
Android 原生的 FRP 机制,是从 Android 5.1 开始引入的。为了实现这个功能,手机有一个单独的分区,config 或 frp 来存放重置保护状态的相关信息。如果此分区里被标记为非正常重置且存放了特定加密存储后的 Google 账户信息,手机在非正常重置之后开机,会无法跳过 Wi-Fi 连接。连接到能访问到 Google 服务的热点之后,手机会强制搜索系统更新,并要求用户登录重置前使用的 Google 账户来验证用户的所有权。——引用自重置保护 / 谷歌锁 Factory Reset Protection 的解除方法 - LetITFly BBS
由于在中国大陆的网络环境下,Google 的服务器是无法正常联通的,所以就会出现难以通过 Google 开机向导的情况,下面我会介绍 3 种方法来教您如何解决这一困境。
解决方法
解决方法如下,任选其中一种即可。
1. 点按四角法
这个方法最简单,缺点是仅仅适用于通过刷入 OpenGapps 后开机遇到开机向导过不去的情况,你只要从左上角沿边缘顺时针点按图中所示的区域,即可直接跳过烦人的验证。注意不要误触到其他区域。
2. 局域网代理法
这个操作稍显复杂,但通过局域网代理的方法我们可以在手机端没办法使用代理 app 翻墙的情况下,登录 Google 账户来完成向导配置,我个人会更偏好这种做法。
电脑端的操作
整体流程如下:
电脑启用代理软件
允许来自局域网的连接
记住本地 HTTP 代理端口
获取电脑的局域网(LAN)IP
首先,我们需要在同一局域网下的电脑里启用代理软件,这里以 Clash for Windows 为例。
启用代理软件后,如上图的标记,打开允许来自局域网的连接的选项,并记住代理软件的本地 HTTP 代理端口,等下会用到。
注意:即便是你使用的是不同的代理软件,如 SS / SSR / V2Ray 之类的,应该都是有允许来自局域网的连接的这个功能选项,你自己找找看,同时注意下你代理软件的本地 HTTP 代理端口(应该是和我的有所不同)。
然后你需要记住你电脑的局域网(LAN)IP,可以通过命令获取。Windows 用户在 cmd 执行 ipconfig
,而 Linux / macOS 用户在 terminal 执行 ifconfig
即可。
完成上述流程后,就轮到手机端的操作了。
手机端的操作
手机连接 Wi-Fi 填写完密码后,不要着急着连接。
展开「Advanced options 高级选项」->「Proxy 代理」-> 选择「Manual 手动」-> 在「Proxy hostname 代理主机名」填写你电脑的局域网(LAN)IP ->「Proxy port 代理端口」填写你所使用的代理软件的本地 HTTP 代理端口 -> 最后「Connect 连接」Wi-Fi。
之后,你的手机就能通过连接局域网代理直接科学上网登录 Google 账户了,接下来应该不用我多说了。
3. 覆写分区法
前面我们提到过 Google 账户信息是存放在 config 或 frp 分区上的,由于此分区不存在文件系统,所以我们的做法是往这个分区里填零,也就是覆写分区。
具体来说,我们需要知道当前设备的账户信息是存放在哪个分区。我们可以让手机进入 TWRP 之后,通过 USB 与电脑连接,然后在电脑终端上执行下列命令(请提前配置好 adb)获知手机的分区信息:
1 | adb shell |
输出的结果比较长,注意找找输出的其中一行里是 frp 还是 config,以我的小米 6 为例,其中一行是:
1 | ...... |
由此可知我的手机是将 Google 账户信息存放在 frp 上的,所以覆写 frp 分区的命令是:
1 | dd if=/dev/zero of=/dev/block/bootdevice/by-name/frp |
如果你的手机是存放在 config 上,那么把上面一行的覆写命令里的 frp 改为 config 就行了。
可能有无法写入的特殊情况,如果遇到的话(没遇到就不用管)可以在覆写命令加上参数,最终命令如下:
1 | dd if=/dev/zero of=/dev/block/bootdevice/by-name/frp bs=512 count=1024 |
照理来说,上述 3 种方法都能奏效,根据你的实际情况选择就行,操作完成之后应该就能通过 Google 开机向导啦。