互連模擬器執行個體

如要測試涉及多裝置互動的應用程式,可以連線多個 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 模擬器,預設無法在執行個體之間直接通訊。每個模擬器執行個體都會在專屬虛擬路由器後方運作,與本機網路和其他模擬器隔離。

如要啟用通訊,您必須手動設定網路重新導向。這個程序會建立對應,將主機上特定通訊埠的流量轉送至模擬裝置上的通訊埠,略過虛擬路由器。

設定網路重新導向的方式有兩種:

  1. 模擬器主控台指令:使用內建主控台,為執行中的模擬器執行個體設定連接埠對應。
  2. Android Debug Bridge (ADB):使用 ADB 指令設定必要的通訊埠轉送規則。

透過模擬器主控台設定重新導向

每個模擬器執行個體都提供控管用的主控台,您可以連線到主控台,發出該執行個體專屬的指令。請使用 redir 主控台指令,視需要為模擬器執行個體設定重新導向。

首先,請確定目標模擬器執行個體的主控台通訊埠號碼。舉例來說,第一個啟動的模擬器執行個體的主控台通訊埠號碼為 5554。接著,連線至目標模擬器執行個體的主控台,指定主控台的通訊埠號碼,如下所示:

    telnet localhost 5554

連線完成後,您必須先進行驗證才能設定重新導向。操作詳情請參閱「啟動及停止主控台工作階段」相關說明。驗證完成後,請使用 redir 指令處理重新導向。

如要新增重新導向,請使用下列指令:

    redir add <protocol>:<host-port>:<guest-port>

其中 <protocol>tcpudp<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 上執行的伺服器,請按照下列方式進行設定:

  1. 在 B 上設定伺服器,監聽 10.0.2.15:<serverPort>
  2. 在 B 主控台上,設定從 A: localhost:<localPort> 重新導向至 B: 10.0.2.15:<serverPort>
  3. 在 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