讓 Parallels 的虛擬 Windows 環境,在開發 Xamarin 時讓 Android App 能有 Android Emulator 中進行測試與執行…
主題: |
在 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並確認可以執行起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的選項。
• 接著在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 Mac上把Genymotion的Android模擬器執行起來,這樣才能在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