【问题标题】:Need help with Android Emulator Networking在 Android 模拟器网络方面需要帮助
【发布时间】:2011-07-21 12:06:43
【问题描述】:

这里是命令行

"C:\Progra~2\Android\android-sdk\tools\emulator.exe" -avd Touch -netspeed full -netdelay none -http-proxy localhost:3128 -debug-proxy

当我尝试从模拟器打开 google.com 时,控制台输出:

server name 'localhost' resolved to 127.0.0.1:3128
proxy_http_setup: creating http proxy service connecting to: localhost:3128
server name 'localhost' resolved to 127.0.0.1:3128
proxy_http_setup: creating HTTP Proxy Service Footer is (len=2):
'
'
http_service_connect: trying to connect to (null)
http_service_connect: using HTTP rewriter
tcp:(null)(880): connecting
tcp:(null)(880): connected to http proxy, sending header
tcp:(null)(880): sending 27 bytes:
>> 43 4f 4e 4e 45 43 54 20 28 6e 75 6c 6c 29 20 48    CONNECT (null) H
>> 54 54 50 2f 31 2e 31 0d 0a 0d 0a                   TTP/1.1....

tcp:(null)(880): header sent, receiving first answer line
tcp:(null)(880): received 'HTTP/1.0 400 Bad Request'
tcp:(null)(880): connection refused, error=400
http_service_connect: trying to connect to (null)
http_service_connect: using HTTP rewriter
tcp:(null)(888): connecting

这是来自维基词典示例调试的异常

Caused by: java.net.ConnectException: en.wiktionary.org/91.198.174.232:80 - Connection refused

关于我的代理:它在我的本地机器上是 squid,它被配置为通过父代理(使用身份验证)进行路由。这适用于浏览器/Android SDK 加载器/IntelliJ 等,但模拟器网络不起作用。

主要的困惑是

tcp:(null)

有什么建议吗?

【问题讨论】:

  • 我们遇到了同样的问题。当我们更新到 Android SDK 12 时,它似乎已经开始了。

标签: android proxy android-emulator android-networking


【解决方案1】:

在模拟器中记录了许多代理支持问题,尤其是对于 Windows 上的最新版本。在此处查看错误报告:

http://code.google.com/p/android/issues/detail?id=5508&q=emulator%20proxy&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars

其中有一些建议的解决方法可能会有所帮助,例如在网络设置中设置代理而不是为整个模拟器设置代理。

【讨论】:

    【解决方案2】:

    我有同样的问题(Mac Os X - Android SDK Tools 12)。 这些是我的 logcat 日志:

    08-04 15:33:41.576:INFO/java.net.Socket(256):www.google.com/209.85.148.104(80):java.net.ConnectException:www.google.com/209.85。 148.104:80 - 连接被拒绝

    我使用 squid 作为代理,日志是:

    1312464815.525 0 172.16.1.1 TCP_DENIED/400 1587 CONNECT :0 - NONE/- text/html

    好像丢了什么东西……

    我还注意到模拟器尝试在请求中使用我的 dns。

    【讨论】:

      【解决方案3】:

      由于您在 Android 模拟器中引用系统上的 localhost,因此您必须使用 http://10.0.2.2:8080/。这是因为 android 模拟器在虚拟机中运行,因此这里的 127.0.0.1 或 localhost 将是模拟器自己的环回地址。此外,您不需要输入-netspeed full -netdelay none,因为这些属性默认设置为这些值。请查看this,了解有关模拟器网络的更多信息。

      编辑:

      根据您的情况,您将localhost 替换为另一个地址。如果它是路由器/网关地址,则将其替换为10.0.2.1。如果它是主机环回接口的特殊别名(即开发机器上的 127.0.0.1),则将其替换为 10.0.2.2。如果它是 First DNS 服务器,则将其替换为 10.0.2.3。如果是可选的第二、第三和第四个 DNS 服务器,则将其替换为 10.0.2.4 / 10.0.2.5 / 10.0.2.6。如果它是模拟设备自己的网络/以太网接口,则将其替换为10.0.2.15。如果是仿真设备自己的环回接口,则将其替换为127.0.0.1。另外,你的开发机器上的地址 127.0.0.1 对应于模拟器自己的环回接口,所以如果你想访问在你的开发机器的环回接口上运行的服务,你应该使用特殊地址10.0.2.2。点击here了解更多信息。

      【讨论】:

      • 在这种情况下可能不相关,因为对“localhost”的引用似乎是在模拟器等主机软件中,而不是在模拟设备中运行的安卓软件。
      • 还有其他地址可以根据情况填写,
      • 那些特殊地址只在模拟器中有意义,但命令行选项是针对模拟器程序本身的,它看到的是PC的网络视图,而不是在模拟器中运行的模拟android设备和看到这个特殊的模拟网络。实际上,一种选择是让它从一个通用环境变量中选择代理,该环境变量根本不知道 android 模拟器网络内部的“知识”。
      猜你喜欢
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 2011-02-25
      相关资源
      最近更新 更多