2016年12月30日 星期五

在 Parallels Desktop 12 for Mac 的虛擬 Windows 環境中,開發 Xamarin 時讓 Android App 能直接部署到 Mac 上的 Android Emulator 中進行測試與執行…

 

由於很多 Mac 的使用者通常在很多狀況下需要有 Windows 的環境還是比較方便,所以會在 Mac 上裝 Parallels Desktop 12 for Mac 來使用的 Windows,但因為 Parallels Desktop 12 for Mac 不支援使用巢狀虛擬化技術,所以若是要在Guest 的Windows 中使用 Visual Studio 直接來開發 Xamarin.Android App 的人,就無法再使用虛擬化技術來運作各家的 Android 模擬器,所以就無法直接讓 Xamarin 所開發的 Android App 有 Android 模擬器來作為測試的執行環境。

如果是願意花錢每年訂閱 Parallels Desktop for Mac Pro / Business Edition 的使用者,就可以直接在 Parallels 的虛擬機器 "配置" 中,找到 "硬體"  –> "CPU與記憶體" 的選項勾選 "啟用nested虛擬化" 技術即可,而本篇文章的作法就做為參考以備不時之需。(因為其實就算支援nested虛擬化,各位想想在虛擬化上再虛擬化的效果…還是會有差的~~)

0


名詞介紹與前置條件

  • Host Mac:
    由於我們會用到 Parallels Desktop 12 for Mac 安裝虛擬 Windows環境,所以本來的Mac系統在文章中就稱呼為Host Mac。
  • Guest Windows:
    在本篇文章中會稱呼透過
    Parallels Desktop 12 for Mac 所執行起的虛擬 Windows 環境為 Guest Windows。
  • 巢狀虛擬化:
    各家的虛擬化技術,如果能讓 Guest OS 再使用虛擬化技術,也就是在 Guest OS 中再建立虛擬環境來使用,這樣的概念稱作巢狀虛擬化。而
    Parallels Desktop 12 for Mac 是沒有支援巢狀虛擬化的,所以當我們打開 Parallels Desktop 12 for Mac 虛擬機器的”配置”中,找到"硬體" -> "CPU與記憶體"的選項,會看到如下圖的畫面:

    1

    會注意到跟 Parallels Desktop for Mac Pro / Business Edition 的設定畫面不同,少了 "啟用nested 虛擬化" 的選項。
  • Host Mac 當中請先安裝好 Genymotion 並確認可以執行起Genymotion的Android 模擬器。Mac當中安裝Genymotion的相關介紹可參考昕力大學: “在 macOS Sierra 安裝與設定 Xamarin 所需的 Android 模擬器測試環境…”的文章。
  • Guest Windows 當中請先安裝好 Visual Studio 與 Xamarin 開發環境。在 Windows 當中安裝 Xamarin 的相關介紹可參考昕力大學: “在 Windows 手動離線安裝 Xamarin 開發環境…” 的文章。

 

Host Mac 中的 Genymotion 以及 Android 模擬器設定

在 Host Mac 中打開 Genymotion,找到並點選 Settings 的選項。

2


接著在 Settings 的分頁選單中找到 "ADB”,並將其中的選項設定為 "Use custom Android SDK tools",如下圖:

3

而其下的 Android SDK 的部分保留為空白值 (下面會有個 "Please specify the path to the Android SDK" 的提醒,不用理會)。


完成後,直接將 "Settings” 視窗關閉,即可直接
點選 Genymotion 當中可執行的 Android 模擬器,並且將它執行起來。(執行的過程中如果出現是否要設定 Android SDK 路徑的詢問視窗,請選擇"否")

4


要知道目前執行起來的這個 Android 模擬器的 IP位址,我們可以透過 jamesmontemagno 所寫的 MonoDroidToolkit 這個 Android App 來協助我們。下載的位址為:
https://github.com/jamesmontemagno/MonoDroidToolkit/blob/master/com.refractored.monodroidtoolkit.samples.apk

接著在這個 github 的頁面上點選 "Download" ,如下圖:


5 

下載完成後,就把這個 apk 拖到所執行的 Android 模擬器當中來安裝,
如下圖:

6
安裝完成後這個 App 會自動執行起來,直接點選 "NETWORK UTILS" 的這個選項,如下圖:

7


接著就會看到這台 Android 模擬器所在的IP位址,如下圖:

8

請把這個 IP位址記下來,稍後的步驟會使用到。

 

Guest Windows當中的設定


在 Gust Windows 當中,我們打開 Visual Studio 後,可以在 "工具" -> "Android" 的選單當中找到 "Android Adb 命令提示字元…" ,如下圖:

9


該命令提示字元執行起來後,輸入"
adb devices"的指令,應該會看到回應 "List of devices attached",然後下面是空的。

接著在輸入 "adb connect 192.168.56.101" ,應該會看到回應 "connected to 192.168.56.101:5555"。

接著再輸入一次 "adb devices" 的指令,應該會看到回應 "List of devices attached" ,下面會列出 Host Mac 上的那台 Android 模擬器,如下圖:

10


接著在 Visual Studio 當中,建立一個 Xamarin.Android 的專案,會看到Visaul Studio 的開始執行按鈕,已經變成那台 Android 模擬器了,如下圖。

11


此時就可以享受直接在 Visual Studio 當中,把開發的 Xamarin.Android 直接部署到 Android 模擬器中來測試執行了,如下圖:

12


當然每次要先打指令來讓 adb 去連結外部的 Android 模擬器太麻煩了,別忘記 Visual Studio 可以透過 "外部工具" 來自行定義一些動作,再加上自己寫好的指令檔來使用。
 

13


所以若完成
"外部工具" 的設定後,就可以直接在 Visual Studio 的工具選單中直接來完成以上連結的指令動作,如下圖:

13


只要先開啟 Host Mac 上的 Android 模擬器後,就可以直接在 Visual Studio 當中使用自行設定好的快捷鍵(文章例子設定的是 Alt + T, A) 快速的連結 Host Mac 上的 Android 模擬器了。

 

本篇文章同步發表於 昕力大學 ,網址是:
https://tpu.thinkpower.com.tw/tpu/File/html/201612/20161230031408_f.html

歡迎前往 昕力大學 觀看更多有關 Xamarin 的文章。

 

參考資料:

Connect to genymotion in OS X from VS running in Parallels?:
https://forums.xamarin.com/discussion/11343/connect-to-genymotion-in-os-x-from-vs-running-in-parallels

Debug with the Xamarin Android Player from Visual Studio in VMWare or Parallels:
http://motzcod.es/post/100735916227/debug-with-the-xamarin-android-player-from-visual

Remote Genymotion device connection failed for API21:
https://stackoverflow.com/questions/28391596/remote-genymotion-device-connection-failed-for-api21

1 則留言:

  1. 您好, 想請教一下若是在MacBook上使用Parallels Desktop 12 for Mac Edition來安裝Windows 10 Pro為了開發Xamarin, 這樣效能會差很多嗎?(就像您說的在虛擬機中在開虛擬機...)
    因為最近在考量要買一台高規格的MacBook同時開發Xamarin.IOS & Xamarin.Android, 還是要買一台一般規格的Macbook開發Xamarin.IOS, 然後再透過另一台PC開發Xamarin.Android, 如果都在同一台MacBook上開發效能會不會影響很多? 畢竟買一台電腦同時開發兩個App比較方便

    回覆刪除