2009-11-18 150 views

回答

56

我沒有以前嘗試(甚至注意到)中巴提到adb connect命令,但我可以證實,轉發TCP端口自己是通過SSH —工作正常—這樣。

模擬器偵聽每個實例的兩個TCP端口:5554用於telnet接口,5555用於與DDMS等工具進行控制通信。所以你可能只能通過轉發端口5555(儘管我只用這兩個端口來試用它)。每個後續的模擬器都會採用下一個可用的偶數+奇數端口號元組(我認爲最高可達5580)。

僅供參考,我做我的本地機器上執行以下步驟:

  • ssh -NL 5554:localhost:5554 -L 5555:localhost:5555 [email protected]
  • killall adb; adb devices

我相信模擬器試圖在啓動時通知本地ADB服務器;因此需要重新啓動adb才能探測本地5554+端口。

請注意,ssh命令中的localhost指的是機器的遠程的本地接口。

adb devices顯示新的模擬器— emulator-5554 —並就好像它是我的本地機器上運行,我可以使用它。

+1

工程就像一個魅力,即使從我的Windows 7機器與膩子SSH端口轉發。謝謝。 – gsbabil 2012-06-20 03:33:24

+0

@gsbabil Putty SSH的命令是什麼? – 2013-07-30 05:58:11

+1

@JimMcKeeth:根據上面的網絡配置,打開Putty,進入Connection> SSH> Tunnels。現在添加一個具有Source-port:5556和Destination:localhost:5554的條目。對Source-port:5557和Destination:localhost:5555重複同樣的操作。乾杯! – gsbabil 2013-07-30 16:54:26

0

我沒有第二個機SDK來的手,但我注意到,仿真器的監聽端口(默認5554,5555)正在監聽0.0.0.0,即從遠程計算機訪問,並adb --help顯示connect <host>:<port>命令。我認爲這會讓它在adb devices中顯示,所以adb命令可以處理它。對於Eclipse,請嘗試「運行/運行配置...」並將目標設置爲手動。這給你一個「設備選擇器」,如果adb連接到它,我猜測它會包含一個遠程模擬器。值得一試。

2

開發人員手機比其他計算機便宜並且可以遠程調試。它具有仿真器默認不存在的所有可選傳感器的額外好處。

我強烈建議讓開發人員手機進行測試。

18

這是我在Windows上如何解決它。我幾乎跟隨克里斯托弗的領導,但我不能編輯,所以一個新的答案將不得不做。

我遇到的問題是,ADB以及模擬器只是在監聽127.0.0.1,而不是0.0.0.0。否則,我會用TCPMon。我想這在Windows上或者是不同的,或者是隨着最新版本的SDK而改變。 (您可以檢查與netstat -ban

  1. 我在運行模擬器的機器上安裝WinSSHD。 (我相信它也可以和freeSSHd一起工作,但我無法在那裏獲得登錄。)

  2. 我在Windows防火牆中打開了端口22(TCP)。 (WinSSHD可能可以爲你做。)

  3. 我在WinSSHD GUI中創建了一個虛擬帳戶。

  4. 我創建了一個從開發機器到仿真器的新PuTTY連接,並確保可以連接。

  5. 然後,我建立了隧道在膩子:連接 - > SSH - >隧道

    Source port: 5554
    Destination: localhost:5554
    Type: Local/Auto

    Source port: 5555
    Destination: localhost:5555
    Type: Local/Auto

    (連接並保持放TY打開,以保持隧道。)

  6. 現在我啓動了遠程計算機上的模擬器,並確保ADB不在那裏運行。

  7. 我重新啓動開發機器上的ADB(adb kill-server,然後adb start-server)。

  8. adb devices和遠程模擬器顯示爲emulator-5554 device。我現在可以直接從Eclipse/ADT部署和運行我的應用程序,其中模擬器顯示在虛擬設備下,就好像它是本地模擬器一樣。

+0

工作很好!感謝細節。 – 2013-08-21 21:25:58

+1

不錯,但我想澄清一下:在步驟4之後,您必須關閉膩子,然後在步驟5中再次打開它,配置隧道並重新連接。步驟6-8:首先啓動模擬器,然後啓動adb(在主機中)。第9步:您可能需要在客戶端計算機上重新啓動adb,然後鍵入adb設備以確保無誤。定期DDMS和日食的東西也應該工作。 – 2014-04-14 15:04:43

+0

@MisterSmith非常有效的點,你爲什麼不提交一個編輯? :) – 2014-04-14 15:15:33

15

我意識到這個問題確實是老了,但我解決了這個問題略有不同,我花了一段時間來弄清楚這個簡單的解決方案。

我通常使用Windows7 PC或筆記本電腦(取決於我在哪裏工作)作爲我的前端,因爲我喜歡GUI,但我更喜歡在無頭Ubuntu服務器上執行所有編輯/編譯/調試因爲它提供的所有命令行功能。我的目標是讓每個Windows系統儘可能多地使用瘦客戶端,而無需任何額外的服務(如sshd)或防火牆漏洞。

因此,這裏是塞納里奧:

  • 系統-A:Windows7系統與運行
  • 系統B Android模擬器:用SDK Ubuntu的服務器安裝

問題如前面描述System-A上的仿真器綁定到localhost,而不是外部以太網接口,因此System-B上的adb無法訪問System-A上的仿真器。您只需在PuTTY中設置遠程端口轉發,即可將SSH連接到System-B。訣竅是在創建兩條隧道時檢查「遠程」單選按鈕,以便隧道方向反向(從登錄的服務器到您登錄的客戶端的隧道)。

tunnel screenshot

最後,對系統-B「localhost」的建立SSH連接後,與亞行進行連接:

System-B$ adb connect localhost 
connected to localhost:5555 
System-B$ adb devices 
List of devices attached 
localhost:5555 device 

現在,您可以下載圖像/調試正常,這是一個微不足道的如果您想將筆記本電腦取出並喝杯咖啡,則可以切換到其他Windows系統。

此外,通過以同樣的方式隧道連接端口5037,您實際上可以轉發adb服務器連接,以便您可以通過System-A上的USB連接真實的Android設備,並從System-B下載圖像。爲了達到此目的,需要確保adb服務器在System-A上運行,而不是在System-B上運行,然後開始SSH會話:

首先,在System-A上啓動adb服務器(命令提示符)

C:\> adb start-server 
* daemon not running. starting it now on port 5037 * 
* daemon started successfully * 
C:\> adb devices 
List of devices attached 
3435F6E6035B00EC  device 

接下來,殺死系統B的ADB服務器

System-B$ adb kill-server 

最後,重新啓動您的SSH會話系統-B和驗證

System-B$ adb devices 
List of devices attached 
3435F6E6035B00EC  device 
+0

有沒有辦法做到這一點,而無需在System-A上安裝android sdk? (windows機器?) – 2011-09-26 03:48:17

+0

不,因爲需要在System-A上運行adb服務器和usb驅動程序才能與設備通信。 – 2011-11-21 19:16:35

+0

我也是這樣做的: Windows 7(運行模擬器) - > Linux(需要跳躍,由於網絡...) - >運行Eclipse的OS X. 我能夠看到具有'adb設備'的設備並使用Eclipse中的模擬器。問題是它不能識別模擬器的Android目標,所以我必須在每次運行時手動選擇目標。 – Frank 2012-07-02 07:36:13

4

如果您的兩臺計算機位於同一個專用網絡中並因此不需要使用SSH加密(這是常見情況),我發現了一種簡單的方法來執行此操作。這可能會有所幫助,因爲SSH隧道可能相當長且難以安裝。例如,第一次在Cygwin/Windows下安裝SSH守護進程可能會導致放棄(當然,我放棄了)。

在Windows下,下列內容需要安裝Cygwin與包httptunnel。這必須在Linux/httptunnel下工作,但我沒有嘗試。

  • 運行在一臺機器(比方說,它的主機名是HostEmulator

  • 在另一臺機器上啓動Eclipse模擬器(姑且稱之爲HostEclipse

  • 打開每臺機器上的Cygwin端子,然後,

  • On HostEmulator,輸入以下命令cygwin的

    hts -F localhost:5554 10000 
    hts -F localhost:5555 10001 
    

HTS意味着HTTP隧道服務器

這兩個命令創建兩個監聽端口10001和10001的半橋,並將這些端口的I/O重定向到本地端口5554和5555,這些端口是仿真器使用的端口(實際上是第一個激動人心的模擬器 - 如果你是其中幾個運行它們將使用更高的端口號在本頁的其他回覆中看到)。

  • HostEclipse,輸入這些的

    htc -F 5554 HostEmulator:10000 
    htc -F 5555 HostEmulator:10001 
    

HTC意味着HTTP隧道客戶端

這些命令創建丟失的半橋。他們監聽本地端口5554和5555,並將這些端口的I/O重定向到我們之前在HostEmulator上創建的半橋。

  • 然後,仍然在HostEclipse,輸入這三個命令

    adb kill-server 
    adb start-server 
    adb devices 
    

這將重新啓動亞行,因爲它不檢測遠程仿真器,否則。它必須在啓動時進行一些掃描。然後它列出了用於檢查的設備(可用模擬器)。

  • 然後你去了。

您可以像使用本地一樣使用遠程模擬器。 您必須保持Cygwin終端在兩臺機器上都處於打開狀態,否則您會殺死您創建的半橋。

我在這裏使用了端口10000和10001來進行機器/機器交換,但是當然,只要尚未使用,您可以使用其他端口。

2

當我的ssh服務啓動失敗時,我的解決方案是用於windows + AndroVM(它需要一個主機專用適配器)。所以它不需要任何額外的軟件。

adb connect <Andro VM IP> 
adp tcpip 555 

在命令提示符以管理員身份運行:在Windows防火牆

netsh interface portproxy add v4tov4 listenport=5555 listenaddress=<host ip> connectport=5555 connectaddress=<Andro VM IP> 

打開TCP端口5555。

然後,從第二的PC上運行:

adb connect <host ip> 
0

所提出的解決方案中沒有爲我工作。 我已經從Emirikol的解決方案開始並對其進行了改進,如同新的Android API> 21,模擬器出現脫機,我不得不去Genymotion設置並將Android SDK路徑留空。 而從命令行:

netsh interface portproxy add v4tov4 listenport=5555 connectport=5555 connectaddress=<emulatorIP> 

netsh interface portproxy add v4tov4 listenport=5554 connectport=5554 connectaddress=<emulatorIP> 

來源:http://www.sarpex.co.uk/index.php/2016/10/02/connect-genymotion-emulator-remotely/ 聲明,我是作者。

相關問題