如要測試涉及多裝置互動的應用程式,可以連線多個 Android 模擬器執行個體,讓這些執行個體彼此通訊。建立連線的方法取決於您使用的模擬器版本。
Android Emulator 36.5 以上版本
Android 模擬器 36.5 以上版本提供簡化的網路模型,可透過共用的 Wi-Fi 網路連線執行個體。
使用這個網路堆疊時,多個模擬器會在同一個虛擬 Wi-Fi 網路上顯示為不同的裝置。這樣一來,這些裝置就能使用標準的 Wi-Fi 通訊協定,自動探索彼此並進行通訊。
模擬器可以使用網路服務探索 (NSD) 和 Wi-Fi Direct 等技術,在虛擬網路上找到彼此。
由於模擬器位於相同的 Wi-Fi 網路,您也可以找出模擬器的特定 IP 位址,並直接從其他模擬器執行個體連線至該位址。如要取得虛擬 Wi-Fi 介面 (wlan0) 的 IP 位址,請從主機執行下列指令:
adb shell ip addr show wlan0
Android Emulator 36.5 之前的版本
如果您使用的是舊版 Android 模擬器,預設無法在執行個體之間直接通訊。每個模擬器執行個體都會在專屬虛擬路由器後方運作,與本機網路和其他模擬器隔離。
如要啟用通訊,您必須手動設定網路重新導向。這個程序會建立對應,將主機上特定通訊埠的流量轉送至模擬裝置上的通訊埠,略過虛擬路由器。
設定網路重新導向的方式有兩種:
- 模擬器主控台指令:使用內建主控台,為執行中的模擬器執行個體設定連接埠對應。
- Android Debug Bridge (ADB):使用 ADB 指令設定必要的通訊埠轉送規則。
透過模擬器主控台設定重新導向
每個模擬器執行個體都提供控管用的主控台,您可以連線到主控台,發出該執行個體專屬的指令。請使用 redir 主控台指令,視需要為模擬器執行個體設定重新導向。
首先,請確定目標模擬器執行個體的主控台通訊埠號碼。舉例來說,第一個啟動的模擬器執行個體的主控台通訊埠號碼為 5554。接著,連線至目標模擬器執行個體的主控台,指定主控台的通訊埠號碼,如下所示:
telnet localhost 5554
連線完成後,您必須先進行驗證才能設定重新導向。操作詳情請參閱「啟動及停止主控台工作階段」相關說明。驗證完成後,請使用 redir 指令處理重新導向。
如要新增重新導向,請使用下列指令:
redir add <protocol>:<host-port>:<guest-port>
其中 <protocol> 為 tcp 或 udp,<host-port> 和 <guest-
port> 則可設定機器與模擬系統之間的對應關係。
舉例來說,下列指令會設定重新導向,處理 127.0.0.1:5000 上所有傳送至主機 (開發) 機器的 TCP 連線,然後將這些流量傳遞至 10.0.2.15:6000 上的模擬系統:
redir add tcp:5000:6000
如要刪除重新導向,請使用 redir del 指令。如要列出特定執行個體的所有重新導向,請使用 redir list。如要進一步瞭解上述指令和其他控制台指令,請參閱「傳送模擬器控制台指令」一文。
本機環境會限制通訊埠號碼。通常這表示如果您沒有特殊管理員權限,就不能使用 1024 以下的主機通訊埠號碼。此外,您也無法針對機器上其他程序已使用的主機通訊埠設定重新導向。上述情況會導致 redir 產生相關錯誤訊息。
透過 ADB 設定重新導向
Android Debug Bridge (adb) 工具提供通訊埠轉送功能,是設定網路重新導向的另一種方式。詳情請參閱 adb 說明文件中的「設定通訊埠轉送」一節。
除了停止 adb 伺服器,adb 目前並未提供移除重新導向的方式。
互連模擬器執行個體
如要允許模擬器執行個體互相通訊,請按照下列步驟設定網路重新導向。
假設您的環境如下:
- A 是開發機器。
- B 是在 A 上執行的第一個模擬器執行個體。
- C 是第二個模擬器執行個體,也在 A 上執行。
如果您想讓 C 連線至在 B 上執行的伺服器,請按照下列方式進行設定:
- 在 B 上設定伺服器,監聽
10.0.2.15:<serverPort>。 - 在 B 主控台上,設定從 A:
localhost:<localPort>重新導向至 B:10.0.2.15:<serverPort>。 - 在 C 上,將用戶端連線至
10.0.2.2:<localPort>。
舉例來說,如果您想執行 HTTP 伺服器,請選取 <serverPort> 做為 80,並將 <localPort> 指定為 8080:
- B 會監聽
10.0.2.15:80。 - 在 B 主控台上下達
redir add tcp:8080:80。 - C 會連線至
10.0.2.2:8080。