#define 纸飞机 不可描述之神器

背景

换了陪伴了两年的MI5,换上了MIX2s。嗯……可是换机的数据迁移和初始化实在是工程量巨大。

当然,没有Google全家桶的安卓机是不完美的。

于是问题来了。

错误描述

与MI5不同的是,MIX2s自带谷歌框架。

但是出厂并不标配Google Play,需要在应用商店里安装。(当然,小米官方是没有的,需要拉到最下面“在百度中搜索”或“在豌豆荚中搜索”)。

首次登陆的时候,并不会遇到什么问题(前提是配置好纸飞机)。但是,在重新启动Google Play,或者重启手机后,再次使用均会出现“DF-DFERH-01”的错误。

只有清除Google Play应用数据后,才能恢复原状。但是,一旦重启应用或机器,错误就会重现。

错误分析

错误信息是Error retrieving information from server,即从服务器获取信息失败。但是,显然我的纸飞机没有问题啊(别问我怎么知道的)。依靠错误代码在网络上搜索了半天,并不能找到有效的解决方法,清数据、重新登陆谷歌账号,都没有用。但是谷歌的其他服务可以使用(账户同步等)。甚是奇怪。

最终,还是本国的论坛更加了解国情。在MIUI论坛中,我找到了相关信息。

在MI5中,由于系统并不自带谷歌框架,所以我安装的是原生的谷歌服务,连接谷歌服务的域名均为.com后缀。但是,小米自带的谷歌服务,域名存在.cn后缀,问题就在于此。

使用抓包工具对Google Play的数据进行分析,发现了以下数据包:

小米自带的谷歌服务,在Google Play启动的时候,会向services.googleapis.cn获取数据,而正常情况下(国际版),应是services.googleapis.com。在国内,由于众所周知的原因,services.googleapis.cn并不会指向谷歌服务器,而是指向了北京某公司的服务器。

以下是使用国内两台主机获取的host数据:

1
2
3
4
5
6
$ host services.googleapis.cn
services.googleapis.cn has address 203.208.39.239
services.googleapis.cn has address 203.208.39.247
services.googleapis.cn has address 203.208.39.255
services.googleapis.cn has address 203.208.39.248
services.googleapis.cn has IPv6 address 2401:3800:4002:805::100f
1
2
3
4
5
6
$ host services.googleapis.cn
services.googleapis.cn has address 203.208.43.95
services.googleapis.cn has address 203.208.43.79
services.googleapis.cn has address 203.208.43.87
services.googleapis.cn has address 203.208.43.88
services.googleapis.cn has IPv6 address 2401:3800:4001:14::1018

查询这类ip地址的归属地,发现均归属于北京:

数据来源:ip138.com

而使用国外的主机获取host数据,就截然不同。以下是使用新加坡以及加州的服务器获取的数据:

1
2
3
$ host services.googleapis.cn
services.googleapis.cn has address 74.125.24.94
services.googleapis.cn has IPv6 address 2404:6800:4003:c03::5e
1
2
3
$ host services.googleapis.cn
services.googleapis.cn has address 172.217.0.35
services.googleapis.cn has IPv6 address 2607:f8b0:4005:802::2003

查询ip归属,均属于谷歌公司:

数据来源:ip138.com

由此,只要将services.googleapis.cn换成国外的DNS服务器进行解析,即可。

修复方案

最简单的方法就是在纸飞机中操作。

  • 如果想要省事,可以直接开启DNS Forwarding,即把所有的DNS请求发送到墙外进行处理。但是这样会导致访问国内的一些服务出现延迟。
  • 所以,最好的方法还是把路由方式改成自定义规则,先导入GFW List,再添加如下一条规则:googleapis.cn,并设定为“域名及其所有子域名”。

最后,祝大家在互联网中,学习愉快!