Android 模拟器提供通用的网络功能,可用于不同的目的,包括从 Windows 虚拟机(VM)连接到 Mac 上运行的仿真器。 在 Mac 上以并行方式运行 Windows 时,这非常有用。 在此方案中,需要在 Mac 上使用模拟器,因为它无法在 Parallels 中运行。 有关在 Mac 上安装 Android 模拟器的信息,请参阅 安装

开发计算机上的地址 127.0.0.1 对应于模拟器的环回接口。

可通过两种主要方法从 Windows VM 内部连接到 Mac 上的 Android 仿真器:

  • 用于 nc 执行数据包转发。 有关详细信息,请参阅 使用 nc 执行数据包转发
  • 使用 ssh 端口转发。 有关详细信息,请参阅 使用 ssh 端口转发
  • 在这两种情况下,Android 调试桥(ADB)用于连接到模拟器。 ADB 是与 Android SDK 平台工具包捆绑的命令行工具,可用于与设备通信。 该 adb 命令有助于执行各种设备操作,包括连接到设备。 有关详细信息 adb ,请参阅 developer.android.com 上的 Android 调试桥(adb )。

    使用 nc 执行数据包转发

    若要使用数据包转发从 Windows VM 连接到 Mac 上运行的 Android Emulator,请使用以下步骤:

  • 在 Mac 上,启动 Android 模拟器。

  • 在 Mac 上,打开 终端

  • 终端 adb ,终止服务器:

    adb kill-server
    
  • 终端中,标识模拟器使用的端口:

    lsof -iTCP -sTCP:LISTEN -P | grep 'emulator\|qemu'
    emulator6 94105 macuser   20u  IPv4 0xa8dacfb1d4a1b51f      0t0  TCP localhost:5555 (LISTEN)
    emulator6 94105 macuser   21u  IPv4 0xa8dacfb1d845a51f      0t0  TCP localhost:5554 (LISTEN)
    

    模拟器使用一对顺序 TCP 端口 -- 控制台连接的偶数端口,以及连接数为奇数的端口 adb 。 在上面的输出中,仿真器侦听 adb 端口 5555,并在端口 5554 上侦听控制台连接。

  • 终端中,用于 nc 将端口 5555(或任何其他端口)外部接收的入站 TCP 数据包转发到环回接口上的奇数端口,并以其他方式转发出站数据包:

    cd /tmp
    mkfifo backpipe
    nc -kl 5555 0<backpipe | nc 127.0.0.1 5555 > backpipe
    

    在此示例中, 127.0.0.1 5555 表示环回接口上的奇数端口。

    如果 nc 命令在终端窗口中继续运行,数据包将按预期转发。 使用完模拟器后,可以在终端窗口中按 Ctrl+C 停止nc执行数据包转发。

  • 在 Windows VM 中,打开 命令提示符

  • 在命令提示符,连接到模拟器:

    adb connect ip-address-of-the-mac:5555
    

    将此示例中的 IP 地址替换为 ip-address-of-the-mac Mac 的 IP 地址,将 5555 替换为上一步中使用的端口。

    可以通过 Android > Android > Adb 命令提示符菜单项在 Visual Studio 中获取对命令行的访问权限adb

    完成连接后,Visual Studio 将在 Android 本地设备将模拟器显示为调试目标,可用于将应用部署到模拟器。

    使用 ssh 端口转发

    如果 Mac 上启用了远程登录,则可以使用ssh端口转发连接到模拟器。

    ssh 端口转发要求已在 Windows VM 中安装 SSH 客户端。 一种选择是安装 Git for Windows。 然后,ssh 命令会在 Git Bash 命令提示符中可用。

    若要使用 ssh 端口转发从 Windows 虚拟机连接到 Mac 上运行的 Android Emulator,请使用以下步骤:

  • 在 Mac 上,启动 Android 模拟器。

  • 在 Mac 上,打开 终端

  • 终端adb ,终止服务器:

    adb kill-server
    
  • 终端中,标识模拟器使用的端口:

    lsof -iTCP -sTCP:LISTEN -P | grep 'emulator\|qemu'
    emulator6 94105 macuser   20u  IPv4 0xa8dacfb1d4a1b51f      0t0  TCP localhost:5555 (LISTEN)
    emulator6 94105 macuser   21u  IPv4 0xa8dacfb1d845a51f      0t0  TCP localhost:5554 (LISTEN)
    

    模拟器使用一对顺序 TCP 端口 -- 控制台连接的偶数端口,以及连接数为奇数的端口 adb 。 在上面的输出中,仿真器侦听 adb 端口 5555,并在端口 5554 上侦听控制台连接。

  • 在 Windows VM 中,打开 命令提示符

  • 命令提示符中,运行 ssh 以在 Windows 上的本地端口与 Mac 环回接口上的奇数仿真器端口之间设置双向端口转发:

    ssh -L localhost:15555:127.0.0.1:5555 mac-username@ip-address-of-the-mac
    

    在此示例中, localhost:15555 表示 Windows 上的本地端口,并 127.0.0.1 5555 表示环回接口上的奇数端口。

    替换为 mac-username Mac 用户名,可以使用命令和 ip-address-of-the-mac Mac 的 IP 地址获取whoami该用户名。

  • 命令提示符中,使用本地端口连接到模拟器:

    adb connect localhost:15555
    

    在此示例中, localhost:15555 表示 Windows 上的本地端口

    可以通过 Android > Android > Adb 命令提示符菜单项在 Visual Studio 中获取对命令行的访问权限adb

    如果将端口 5555 用于本地端口, adb 则认为模拟器在本地 Windows 上运行。 这不会在 Visual Studio 中引起任何问题,但在 Visual Studio for Mac 中,它会导致应用在启动后立即退出。

    完成连接后,Visual Studio 将在 Android 本地设备将模拟器显示为调试目标,可用于将应用部署到模拟器。

    Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see: https://aka.ms/ContentUserFeedback.

    提交和查看相关反馈

  •