2012-05-25 60 views
2

我正在嘗試使用Oracle VirtualBox配置Android x86運行計算機,以便它可以與Eclipse一起工作。我在使虛擬機「在線」時遇到了一些麻煩。我通過鍵入在Android終端仿真器下面連接手機到亞行:後來VirtualBox上的Android x86:Android已連接但未聯機

ifconfig eth0 192.168.40.1 netmask 255.255.255.0 
route add default gw 192.168.40.1 dev eth0 

,我切換到cmd並輸入 ADB本地主機連接

但是當我嘗試運行使用Eclipse我的測試代碼在虛擬Android上,它不會出現在Android設備選配器菜單中。此外,當我輸入adb devices在cmd中,這是響應:

List of devices attached 
localhost:5555 offline 

令我擔心的是,以後每次我關閉虛擬機,我不得不在再次鍵入ifconfigroute add命令的另一件事終端,當我重新啓動,爲了連接到設備。

如何才能使設備在線?

編輯: 萬一它很重要,虛擬機被配置爲通過NAT網絡進行通信。這就是我的端口轉發規則是這樣的: 協議:TCP

主機IP:*

主機端口:5555

遊客IP:*

來賓端口:5555

EDIT2 相關問題:Error: device offline

EDIT3:潛在的解決方案:Android device chooser - My device seems offline

+0

這個答案讓我:http://stackoverflow.com/a/18904761/436938 –

回答

3

當我開始開發一些Android應用程序,我不得不面對同樣的問題,所以尋找的東西,在VirtualBox guide我讀過的NAT不需要在主機網絡和訪客系統上進行任何配置,因此,這是VirtualBox中的默認網絡模式。啓用了NAT的虛擬機就像一臺通過路由器連接到互聯網的真實計算機。在這種情況下,「路由器」是VirtualBox網絡引擎,它將透明地映射到虛擬機 。在VirtualBox中,此路由器位於每臺虛擬機和主機之間。這種分離最大限度地提高了安全性,因爲默認情況下,虛擬機無法相互通話。 NAT模式的缺點是,就像路由器後面的專用網絡一樣,虛擬機是無法從外部互聯網無法看到的。客戶操作系統發出的網絡幀由VirtualBox的NAT引擎接收,該引擎提取TCP/IP數據並使用主機操作系統重新發送。對於主機上的應用程序或與主機位於同一網絡上的另一臺計算機,看起來數據是由主機上的VirtualBox應用程序使用屬於該主機的IP地址發送的。 VirtualBox會偵聽發送的軟件包的回覆,並重新打包並將它們重新發送到其專用網絡上的來賓計算機。
虛擬機從集成到VirtualBox的DHCP服務器接收其專用網絡上的網絡地址和配置。分配給虛擬機的IP地址通常與主機完全不同。由於虛擬機連接到Virtual-Box內部的專用網絡並且主機不可見,因此客戶機上的網絡服務不能被主機或同一網絡上的其他計算機訪問。但是,像物理路由器一樣,VirtualBox可以通過端口轉發將選定的服務提供給外部世界。這意味着VirtualBox會監聽主機上的某些端口,並將所有到達該端口的數據包重新發送到來賓端,在同一端口或不同的端口上。 因此,執行cmd,轉到文件夾安裝VirtualBox的地方,並在VBManage.exe是,爲了應用TPC端口轉發輸入:

VBoxManage modifyvm "NameOfYourAndroidVM" --natpf1 adb,tcp,*,5555,*,5555 

現在,您可以通過連接到你的虛擬機亞洲開發銀行:

adb connect localhost 
+1

看來你需要刪除這部分空間,否則VBoxManage吐出一個錯誤: ADB,TCP,*,5555, *,5555 – Josh1billion

+1

@ Josh10billion謝謝!我沒有注意到我拼錯了空格!我立即編輯我的答案! – Ant4res

+0

其實空間拼寫正確,他們只是不應該在那裏:) –

5

這比所有這一切更容易,使亞行了在Android虛擬機的終端仿真類型TCPIP:

adb tcpip 5555 

然後經由ADB從命令行連接你的Eclipse機上:

adb connect 192.168.40.1:5555 

的VM現在應該通過ADB設備以及經由在Eclipse設備視圖可用。

+0

我得到'error:device offline'。 – whoKnows

0

只需將vm配置爲使用pridge網絡模式,並在網絡上啓用dhcp服務器即可。