#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 | $ host services.googleapis.cn |
1 | $ host services.googleapis.cn |
查询这类ip地址的归属地,发现均归属于北京:
数据来源:ip138.com
而使用国外的主机获取host数据,就截然不同。以下是使用新加坡以及加州的服务器获取的数据:
1 | $ host services.googleapis.cn |
1 | $ host services.googleapis.cn |
查询ip归属,均属于谷歌公司:
数据来源:ip138.com
由此,只要将services.googleapis.cn
换成国外的DNS服务器进行解析,即可。
修复方案
最简单的方法就是在纸飞机中操作。
- 如果想要省事,可以直接开启
DNS Forwarding
,即把所有的DNS请求发送到墙外进行处理。但是这样会导致访问国内的一些服务出现延迟。 - 所以,最好的方法还是把路由方式改成自定义规则,先导入GFW List,再添加如下一条规则:
googleapis.cn
,并设定为“域名及其所有子域名”。
最后,祝大家在互联网中,学习愉快!