從 Windows VM 連線到在 Mac 上執行的 Android 模擬器是否可行?
若要從 Windows 虛擬機連線到 Mac 上執行的 Android 模擬器,請使用下列步驟:
注意
我們建議使用不包含Google Play商店的Android模擬器。
在 Mac 上啟動模擬器。
adb
終止 Mac 上的伺服器:adb kill-server
請注意,模擬器正在回送網路介面上接聽 2 個 TCP 連接埠:
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)
奇數編號的埠是用來連線到
adb
的埠。 請參閱 https://developer.android.com/tools/devices/emulator.html#emulatornetworking。選項 1:用於
nc
將埠 5555(或任何其他您想要的埠)外部接收的輸入 TCP 封包轉送至回送介面上的奇數埠 (在此範例中為 127.0.0.0.1 5555 ),並以其他方式轉送輸出封包:cd /tmp mkfifo backpipe nc -kl 5555 0<backpipe | nc 127.0.0.1 5555 > backpipe
只要
nc
命令在終端機視窗中持續執行,封包就會如預期般轉送。 您可以在 [終端機] 視窗中輸入 Control-C,以在使用模擬器完成之後結束nc
命令。(選項 1 通常比選項 2 容易,特別是如果 系統喜好設定 > 安全性與隱私權 > 防火牆 已開啟。
選項 2:用來
pfctl
將共用網路介面上的 TCP 封包從埠5555
(或任何其他您想要的埠)重新導向回送介面上的奇數埠(127.0.0.1:5555
在此範例中):sed '/rdr-anchor/a rdr pass on vmnet8 inet proto tcp from any to any port 5555 -> 127.0.0.1 port 5555' /etc/pf.conf | sudo pfctl -ef -
此命令會使用
pf packet filter
系統服務來設定埠轉送。 換行符很重要。 請務必在複製貼上時保持完好無損。 如果您使用 Parallels,您也必須從 vmnet8 調整介面名稱。vmnet8
是 VMWare Fusion 中共用網路模式的特殊 NAT 裝置名稱。 Parallels 中適當的網路介面可能是 vnic0。從 Windows 電腦 連線 模擬器:
C:\> adb connect ip-address-of-the-mac:5555
將 「ip-address-of-the-mac」 取代為 Mac 的 IP 位址,例如 ,如 所列。
ifconfig vmnet8 | grep 'inet '
如有需要,請將 取代5555
為步驟 4 中您想要的其他埠。 (注意:取得命令行存取adb
的其中一種方式是透過Visual Studio中的Tools > Android Android > Adb 命令提示字元。
使用替代技術 ssh
如果您已在 Mac 上啟用 遠端登錄 ,您可以使用 ssh
埠轉送來連線到模擬器。
在 Windows 上安裝 SSH 用戶端。 其中一個選項是安裝 Git for Windows。
ssh
命令接著會在 Git Bash 命令提示字元中提供。請遵循上述步驟 1-3 來啟動模擬器、終止
adb
Mac 上的伺服器,以及識別模擬器埠。在 Windows 上執行
ssh
,以在 Windows 上的本機埠之間設定雙向埠轉送(localhost:15555
在此範例中)和 Mac 回送介面上的奇數模擬器埠(127.0.0.1:5555
在此範例中為):C:\> ssh -L localhost:15555:127.0.0.1:5555 mac-username@ip-address-of-the-mac
將 取代
mac-username
為您的 Mac 用戶名稱,如所列whoami
。 將取代ip-address-of-the-mac
為 Mac 的 IP 位址。使用 Windows 上的本機埠 連線 至模擬器:
C:\> adb connect localhost:15555
(注意:取得命令行存取
adb
的一個簡單方式是透過Visual Studio中的Tools > Android Android > Adb 命令提示字元。
警告:如果您使用本機埠的埠 5555
, adb
會認為模擬器是在 Windows 本機上執行。 這不會在 Visual Studio 中造成任何問題,但在 Visual Studio for Mac 中,它會導致應用程式在啟動後立即結束。
尚不支援使用 adb -H
替代技術
理論上,另一種方法是使用 adb
的內建功能連線到adb
遠端電腦上執行的伺服器(例如 )。https://stackoverflow.com/a/18551325
但 Xamarin.Android IDE 延伸模組目前不提供設定該選項的方法。
連絡人資訊
本文件討論截至 2016 年 3 月的目前行為。 本檔所述的技術不是 Xamarin 穩定測試套件的一部分,因此未來可能會中斷。
如果您注意到這項技術不再運作,或您注意到檔中的任何其他錯誤,請隨意新增至下列論壇線程的討論: http://forums.xamarin.com/discussion/33702/android-emulator-from-host-device-inside-windows-vm。 感謝您!