2016-12-30 106 views
0

所以基本上我有一個虛擬機中的Android應用程序(我運行&通過Android Studio進行調試)。 它與一個php REST風格的web服務應用程序通信:https://mywebservice.mydomain.com。 我希望它實際上與我的本地Web服務應用程序(而不是mywebservice.mydomain.com上的真實服務器)進行通信。 當我有我直接在WAMP十歲上下的安裝運行Web服務應用程序,這是很容易... 我可以創造一個與主機文件:從Android VM應用程序到Vagrant通信[web服務]應用程序

10.0.2.2 mywebservice.mydomain.com 

,並做了「亞行推動主機的/ etc /系統/主機'在虛擬機運行時。 Android VM認爲10.0.2.2是主機箱,因此mywebservice.mydomain.com實際上是我個人的WAMP VirtualHost,而不是真正的實時服務器。 注意我自己的框的hosts文件,我有這個,所以我可以在我的窗口的瀏覽器直接訪問該虛擬主機(如果我想很容易進入並改變例如Web服務的一些管理設置):

127.0.0.1 mywebservice.mydomain.com 

(並且所有這些都使得它很容易,所以我可以調試完整的應用程序,從本地主機Android應用程序更改到本地主機php web服務更改,或者直接在Windows上檢查出php web服務應用程序[它有一個登錄管理界面] )。

現在我想讓網絡服務的php應用程序不是運行在WAMP中,而是運行在一個Vagrant linux機器上(我已經運行並且可以從我的Windows瀏覽器訪問,現在通過默認的輸入地址https://awesome.dev 。現在確定我可以改爲mywebservice.mydomain.com,而不是通過Windows訪問),但我無法弄清楚如何讓我的Android VM應用程序仍然「指向」(通過主機文件或一些替代方法在不同的Vagrant網絡設置下的IP地址可能?)。 我不確定是否有任何好的想法,因爲我嘗試了谷歌搜索,沒有多少運氣。 任何想法?

PS這將是偉大的,如果我能做到這一點,而無需修改Android Java源代碼。也許可以改變Java代碼中的Web服務URL來指向VM框的IP地址。我還沒有嘗試過,但是首先在尋找一些想法。

回答

1

只要你的Linux機器是你的虛擬機在同一網絡上(你的主機要準確),你仍然可以使用他們的方式你以前使用過的/ etc /系統/主機,只需將它指向的Linux的IP。

或者,您也可以指向虛擬機代理,因此所有的HTTP流量會經過它,那麼它取決於你使用什麼代理(取決於您的主機操作系統上),以及如何配置它重定向到你的Linux機器

+0

所以我看到的Android VM是一個模擬的3G連接(無法通過Wifi連接到我的wifi網絡)。如果我將'adb shell'加入到Android VM中,我只會將10.0.2.15看作eth0 IP(不知道它是否真的在使用3G模擬進行使用)...... Vagrant VM的默認值爲192.168.56.101,它的'private_network '地址(我可以更改爲'public_network',因此可以獲得與我的筆記本電腦相同的IP範圍地址,因此如果我的個人筆記本電腦是192.168.1.248,那麼我會爲Vagrant VM Web服務獲得192.168.1.249)。無論哪種方式,如果Android VM主機擁有流動虛擬機的公共或私有IP地址,則該方法無效。 – armyofda12mnkeys

+0

有關您的替代方案的第二個問題...您的代理將所有HTTP通信給Vagrant虛擬機(ssh轉發或在Windows上的更簡單的程序代理)如何? – armyofda12mnkeys

+0

按照第二個問題這真的取決於你有得心應手,任何贏得或Linux代理會做 –

相關問題