从模拟器调用切换Android模拟器网络流量

时间:2012-11-05 01:27:50

标签: android android-emulator

我正在编写用于管理大量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流量,似乎我得到了“无法识别协议”错误,因此我不知道发生了什么。根据我的情况,任何人都可以验证这种空路线方法是最好的方法吗?

1 个答案:

答案 0 :(得分:0)

尝试使用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更新为空代理的地址。