ThinkPower University
回昕力大學瀏覽更多文章分享

主題

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

文章簡介

由於很多Mac的使用者通常都用Parallels Desktop 12 for Mac來使用Windows系統,畢竟很多狀況下有Windows的環境還是比較方便。但也因為有 Windows 系統那就可以在其上裝個 Visual Studio 來開發程式,但很可惜的是由於Parallels Desktop 12 for Mac 並不支援巢狀虛擬化技術,也就是無法在虛擬環境中再使用虛擬化技術來模擬Android。所以也就無法在 Visual Studio 開發 Xamarin Android App 時,直接有 Android Emulator來做測試。但我們可以將 App 部署到 Mac上裝好的 Android Emulator 來測試與執行,這就讓本篇文章來解說吧!

作者

James Tsai

版本/產出日期

V1.0/2016.12.29



1. 前言


在Mac上使用 Parallels Desktop 12 for Mac中的Windows系統時,因為Parallels Desktop 12 for Mac 不支援使用巢狀虛擬化技術,所以在Guest 的Windows 中就無法再使用虛擬化技術來運作各家的 Android 模擬器,而所以就無法用Visual Studio直接讓Xamarin 所開發的Android App有個測試的執行環境。不過沒關係,經過本篇文章的指引將可以解決此問題。

如果是願意花錢每年訂閱Parallels Desktop for Mac Pro / Business Edition的使用者,就可以直接在Parallels的虛擬機器”配置”中,找到”硬體”->”CPU與記憶體”的選項勾選”啟用nested虛擬化”技術,即可,而本篇文章的作法就做為參考以備不時之需。



2. 環境準備


macOS Sierra

Parallels Desktop 12 for Mac

Genymotion at Host Mac

Visual Studio 2015 with Update 3 at Guest Windows


3. 本文


名詞介紹與前置條件


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與記憶體的選項,會看到如下圖的畫面:



會注意到跟Parallels Desktop for Mac Pro / Business Edition的設定畫面不同,少了啟用nested 虛擬化的選項。

Host Mac當中請先安裝好Genymotion並確認可以執行起GenymotionAndroid 模擬器。Mac當中安裝Genymotion的相關介紹可參考昕力大學: macOS Sierra 安裝與設定 Xamarin 所需的 Android 模擬器測試環境 的文章。

Guest Windows當中請先安裝好 Visual StudioXamarin開發環境。在Windows當中安裝Xamarin的相關介紹可參考昕力大學: Windows 手動離線安裝 Xamarin 開發環境 的文章。


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


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



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



而其下的Android SDK 的部分保留為空白值 (下面會有個Please specify the path to the Android SDK”的提醒,不用理會)。完成後,直接將Settings視窗關閉。

點選Genymotion當中可執行的Android 模擬器,並且將它執行起來。



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

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



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




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



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



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


Guest Windows當中的設定


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



該命令提示字元執行起來後,輸入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模擬器,如下圖:



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



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



當然每次要打指令來讓adb去連結外部的Android模擬器太麻煩了,別忘記Visual Studio可以透過外部工具來自行定義一些動作。所以,如果常需要這樣做的時候,可以透過這個好用的外部工具的設定,來幫忙完成以上連結的指令動作,如下圖:




完成外部工具的設定後,只要點選這個連結Host Android 模擬器,就可以達到我們要的效果,再加上有設定快捷鍵的話,就根本是內建效果的感覺了。

但很可惜的是,此方法必須先Host MacGenymotionAndroid模擬器執行起來,這樣才能在Guest Windows當中去連結。如果要突破這個問題,需要使用到Genymotion命令方式(GMTool)啟動player執行Android 模擬器,但Genymotion的命令方式(GMTool)的部分,若要使用則是需要付費購買Genymotion的授權版本才可以。


4. 參考來源


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