这几天一直折腾android emulator设置proxy的问题。某些环境下需要使用代理上网(如公司),尝试了网上介绍的几种方式都没有成功,方法是应该是对的,只是还有些细节没有提到,所以弯路也走了不少。笔记本拿回家就没有问题,emulator browser能成功上网。现在就记录下一些尝试了的过程,以便以后参考或能帮助遇到同样问题的朋友。
尝试一,常见的解决办法:设置-http-proxy来启动emulator。(我仍然失败了)
Android\sdk\tools\emulator.exe -http-proxy:[my.proxy.server]:[port] -avd N6API23
不论我是通过-http-proxy启动参数还是通过设置环境变量的方式来设置这个proxy都没有解决问题,emulator的broswer仍然不能访问网络。
尝试二:设置APN : 通过emulator中的设置APN(Access Point)来设置代理。(在我的环境里仍然不工作 )
settings->more->cellular network->access point names -> 编辑已有的Access Point.(T-Mobile US)->(Proxy & Port)
尝试三:结合尝试一和二,一起都配置好。(仍然不工作,有点抓狂,然后继续阅读android developer guide), 不过现在是net::ERR_NAME_NOT_RESOLVED错误,不是什么timeout的错误。
那是代理DNS设置的问题了?
尝试四 添加-dns-server 启动参数,(先ipconfig -all显示本机的DNS server IP, 然后用它作为dns-server), 这次好像有点用。但在我的环境下还是有错误(net::ERR_INCOMPLETE_CHUNKED_ENCODING)。
还有另一个问题就是,刚开始访问几个网站还可以,但是发现其他网站不能访问后,再访问之前能访问的网站,又不能访问了,仍然是net:ERR_NAME_NOT_RESOLVED.
做了一些关于这个错误的Google研究,有一个解释是由一些杀毒软件引起的(http://stackoverflow.com/questions/29894154/chrome-neterr-incomplete-chunked-encoding-error),所以这个问题暂时忽略。(也有可能是网站服务器端的问题。)
尝试四 删除原来的avd重新创建一个AVD。加上上面的尝试方案,成功解决了问题。这里有一个细节就是原先的AVD创建使用的System Image是x86的,后来换成x86_64的,因为我的本机是64位的。不知道会不会引起问题。现在加上-http-proxy 就可以了,都不用设置-dns-server也能上网。
有几个问题需要后续考虑的:
1. 在设计代理或者dns时,使用IP和使用“机器名+域”的方式是否一样?
2. x86和x86_64的System Image是否会有影响?
3.创建AVD时没有给足RAM会不会有影响?