【问题标题】:Communication between Android EmulatorsAndroid模拟器之间的通信
【发布时间】:2010-10-28 15:34:47
【问题描述】:

我想知道两个 Android 模拟器之间的通信是否可以在两台联网的不同机器上开始。

例如 - 模拟器 A 在机器 M1 上运行 - 模拟器 B 在机器 M2 上运行

A 和 B 可以交换消息吗?

如果是,我使用什么 IP 地址?

非常感谢 黛博拉

【问题讨论】:

    标签: android android-emulator


    【解决方案1】:

    你可能已经知道了。从 android-sdk-tools_r7 开始,至少应该可以将两个模拟器相互连接。我不知道物理机之间是否有效。或许可以在两个主机之间为这个特定的广播设置伪装。

    来自安卓commit

    启用仿真器互连

    此补丁为模拟器添加了一个 -shared-net-id 选项 在共享网络中加入模拟器。 如果给出了该选项,则模拟器会以附加的方式启动 绑定到多播套接字的网络接口。这个多播套接字 模拟网络集线器,互连模拟器。 如果未给出 -shared-net-id 选项,则不会发生任何变化。

    要连接两个模拟器,请在启动模拟器时使用-shared-net-id <number> 命令行选项。然后,他们将直接在模拟器上共享发送到或从 ip 10.1.2.<number> 读取的所有内容。

    另一种方法是使用 adb 在模拟器之间启用端口转发,然后为联网机器上的这些端口设置伪装。

    我不确定这两种解决方案是否符合您所要求的用例。如果没有,向原始问题添加更多详细信息可能会有所帮助。 :)

    免责声明:我没有尝试过第一种方法,第二种我只是用来确保模拟器可以绕过令人讨厌的公司防火墙和 HTTP 代理,以便我们可以测试 android 浏览器。原则应该是合理的。

    更新: 不,我玩了很多次,但没有找到好的解决方案。我在 iptables 方面做得不够好,无法建立一个适用于服务器端的有效隧道。

    问候,
    迈克尔

    【讨论】:

    • 另外,我刚刚发现使用wireshark 来调试你的防火墙设置会有所帮助。很多。 :-)
    【解决方案2】:

    模拟器通常具有对开发机器的 LAN 或 Internet 连接的出站访问权限,因此问题出在入站端。

    您可以使用模拟器或 ADB 端口转发将流量发送到模拟器,但可能只能在开发机器的环回接口上本地产生流量,而不是外部流量。如果确实如此,最简单的事情可能是编写或配置一个端口转发器,它侦听开发机器的外部接口并转发到转发到模拟器的端口。

    【讨论】:

    • 嗨,克里斯!感谢您的回复!我已经使用这种方法,我正在寻找另一种方法,如果它存在的话:)
    • 一个独立的转发守护进程可能比重新编译 adb 或模拟器本身来监听外部接口的替代方案要简单得多......我想另一个选择是运行 x86 构建android 在 vi​​rtualbox 中,或者等着看官方模拟器朝那个方向移动的提示是否属实。或者使用硬件设备(beagle board?)而不是模拟器。
    猜你喜欢
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2011-05-31
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多