最近想用bluestacks代替android SDK里的qemu模拟器做些测试,发现死活连不上网。

症状是任何网络应用都无法连接。

开始以为是bluestacks选择了错误的网卡(本机有多网卡),经过一系列漫长而坑爹的排查,终于发现了问题的症结所在:竟然是DNS设置问题

如果你的BS也无法联网,不妨按照以下步骤一一排查。问题的成因多种多样,但因为BS的一些判断错误,而采用了错误的DNS设置。

  1. 打开自带浏览器,输入www.baidu.com或者www.google.com查看是否可以连接 <-肯定是不能吧
  2. 在浏览器内输入123.125.114.144,这是百度的ip,如果可以连接或者跳转到www.baidu.com并提示无连接则证明是DNS问题
  3. 打开电脑上的命令提示符,输入(粗斜体为输入内容):

Z:\TEMP adb shell
adb server is out of date. killing…
* daemon started successfully *
验证一下是否确实是DNS设置有误
shell@maguro:/ $ nslookup www.baidu.com
Server:10.10.0.23
会卡在这里,不管,按Ctrl+C退出,server后面的ip不同机器可能不同

Z:\TEMP adb shell
shell@maguro:/ $ /system/xbin/bstk/su
shell@maguro:/ # ping 10.10.0.23 (这就是上面Server后面的内容)
PING 10.10.0.23 (10.10.0.23): 56 data bytes
显然ping不通,因此判断BS自动设置的DNS错误

接下来,如果你的BS已经root,则可以输入
shell@maguro:/ # setprop net.dns1 8.8.8.8
shell@maguro:/ # setprop net.dns2 8.8.8.4

这一操作每次重启都要重复,你也可以用一个叫Set DNS的应用来方便设置

如果你的BS没有root,请到这里http://tieba.baidu.com/p/2187297656 下载符合你版本的root文件;结束所有HD-开头的进程后覆盖C:\ProgramData\BlueStacks\Android中的同名文件即可(win vista以下是在C:\Documents and Settings\All Users\Application Data\BlueStacks\Android下)