【问题标题】:Toggle Android emulator network traffic from emulator invocation从模拟器调用切换 Android 模拟器网络流量
【发布时间】:2012-11-05 01:27:49
【问题描述】:

我正在编写脚本来管理大量 Android 模拟器,我需要禁用其中一些模拟器上的所有网络流量。因为我在无头服务器上做所有这些,所以我不能 使用emulater documentation 中描述的 F8 热键。

我目前正在使用 emulator-arm ... -http-proxy 0.0.0.0:0 通过空代理路由 TCP 流量,这会阻止我想要的流量。

我认为这运行良好,直到我在运行脚本时发现一些奇怪的错误消息。控制台开始输出accept too many open files 并使用lsof 检查打开的文件,发现大量消息表明“无法识别协议”

...
emulator- 19463 username   19u     sock                0,6       0t0 1976595845 can't identify protocol
emulator- 19463 username   20u     sock                0,6       0t0 1976595847 can't identify protocol
...

我发现的唯一“解决方案”是杀死所有模拟器,然后等到再次达到此限制,这根本不是解决方案。

在调用模拟器时还有其他方法可以做到这一点吗?我是否错误地使用了-htt-proxy 开关来阻止流量?

其他人通过manually doing this by using airplane mode 找到了阻止流量的解决方案,但这对我来说是不可行的,因为我正在通过脚本控制模拟器。我可以使用我的脚本将键事件发送到模拟器并以飞行模式打开手机,但我更喜欢比这更可靠的东西。

编辑:即使我没有通过空路由路由 TCP 流量,我似乎也会收到“无法识别协议”错误,所以我不知道发生了什么。鉴于我的情况,任何人都可以验证这种空路由方法是最好的方法吗?

【问题讨论】:

    标签: android android-emulator


    【解决方案1】:

    尝试使用 QEMU -net-forward 参数:

    $ANDROID_SDK/tools/emulator -avd $AVD_NAME -qemu -net-forward 0.0.0.0:0.0.0.0:80:127.0.0.1:8888
    

    您需要将127.0.0.1:8888 更新为您的空代理地址。

    【讨论】:

      猜你喜欢
      • 2013-02-06
      • 2011-01-28
      • 2011-05-13
      • 1970-01-01
      • 2011-01-20
      • 1970-01-01
      • 2016-03-30
      相关资源
      最近更新 更多