Visual Studio中的Android模擬器使用詳解

oschina發表於2014-11-20

Microsoft 本週釋出了 Visual Studio 2015 預覽版, 裡面包含 Android 開發工具. 安裝的時候, 如果選 Android 開發, Visual Studio 會把除錯 Android 應用程式用的 Visual Studio 模擬器也裝上.

在介紹這個新模擬器之前, 我們先來聊一聊, 為什麼需要一個新的 Android 模擬器 – 當然, 你也可以直接跳到自己感興趣的部分去閱讀 :-)

Android 模擬器存在的必要性

我們知道, 模擬器在 程式設計-編譯-除錯 開發週期中, 扮演著很重要的角色(甚至比物理裝置還重要). 所以我們相信, 今天釋出的這個模擬器, 在開發中是必不可少的.

有了優秀的模擬器, 不代表我們就不需要物理裝置了. 反之亦然, 他們之間其實是互補的關係.

下列幾種情況, 只能用物理裝置測試, 模擬器派不上用場:

測試程式碼的效能. 雖然模擬器能幫你糾正程式碼中的錯誤, 但是它無法正確的給出, 程式碼在指定裝置上的效能評估. 畢竟, 我們都希望測試的結果, 儘量接近使用者實際使用的效果.

測試某些硬體問題. 比如, 你想測試下游戲的觸控靈敏度, 外放的音效, 或者除錯 OEM 裝置的 Bug , 這些測試只能在物理裝置上進行.

評估真實的使用者體驗. 譬如, 你設計出來的人機互動介面, 適不適合使用者邊走路, 邊單拇指操作?

除去上面列舉的場景,大家應該都會很樂意使用模擬器。因為除錯程式碼通常佔用了80%的開發時間,而模擬器為我們大大提高了工作效率。(除非你的模擬器有其他阻塞性問題或者使用限制)。下面是使用模擬器的幾個理由:

大部分的測試工作都是用來驗證程式的正確性而非效能,並且大部分的程式碼都與底層硬體無關。所以是用模擬器是極好的。

購買一大堆硬體裝置來測試是一件很奢侈的事情(特別是持續不斷的購買新機)。大部分的硬體差異可以使用模擬器軟體進行配置,比如說螢幕解析度,不同螢幕的DPI,API級別/平臺版本號等等。

使用物理動作來測試程式對感測器輸入的反應也是很費勁的,比如說動作變化、地理位置變化或是網路/電池的變化。在這種場景下,選擇模擬器來模擬感測器的輸入就非常便捷高效,比如說模擬器可以模擬一段旅程中位置的變化,並測試應用程式對地理位置變化的響應。

使用模擬器還有一項而外的便利。管理多個物理連線的USB裝置(一大堆連線和介面),是很麻煩的。此時使用模擬器就簡單得多,模擬器就是一個執行在電腦上普通的應用層序,除去了物理連線的煩惱,非常便於管理。

所以說模擬器是軟體的開發的好伴侶,我們希望把VS的模擬器打造成第一流的。我們從開發者那裡收集到現有模擬器的痛點,在我們的版本上予以一一擊破:

速度慢。這是從Android開發者那排名第一的抱怨。“這個模擬器速度慢極了,嚴重影響了我的生產率,我還不如用真機測試。”速度慢是不可接受的。使用模擬器應該比使用真機的執行速度更快才是,這樣才能提高測試效率。記住一點,我們並不是在測試程式碼的執行效能,對功能測試來說就是要讓模擬器儘可能地跑得快。

與Windows的Hyper-V衝突。很多模擬器在執行時要關閉Hyper-V,或是在使用Hyper-V時,效能反而更糟糕。但使能Hyper-V是大部分開發者的常見配置,頻繁重啟電腦來開關Hyper-V是不可接受的。

對那些要使用Windows Phone模擬器(基於Hyper-V)的開發者來說就更為苦惱。總不能為因為要測試跨平臺的程式碼,不斷的重啟和配置電腦設定吧。

額外的購買和安裝步驟。如果你已經在使用Visual Studio,那麼恭喜你,你不許要再額外購買和安裝一款其他的模擬器軟體。

更多的費用開銷。購買一款卓越的模擬器,也意味著更高的開銷,這也是拒絕使用模擬器的一個主要原因。Visual Studio的Android模擬器是附贈的,不需要額外的費用。

簡單來說,我們在Visual Studio的Andriod模擬器解決了以上痛點。廢話不多說,下面開始給大家介紹使用VS的Android模擬器的除錯方法,我們將從如何選擇Android模擬器開始講起。

用 Visual Studio 模擬器除錯 Android 程式

無論你用的是哪一種程式設計模式: 用 JavaScript (或 TypeScript) 的 Cordova, C++, 或 是用 C# 的 Xamarin, 都可以在 Visual Studio 2015 預覽版上 編寫-編譯-除錯 Android 程式碼.

啟動除錯模式的時候, 要選擇除錯目標(Debug Target). 除錯目標可以是一臺物理裝置, 或者是某個在你電腦上執行的模擬器. 我們來看看怎麼給 Visual Studio 2015 預覽版中的 Cordova 和 C++, 以及 Visual Studio 2013 的 Xamarin 選擇一個除錯目標.

C++ 專案的除錯目標選擇選單如下圖所示:

Cordova 專案要選擇選單的最後兩項, 具體看下面的截圖:

(切記, 不要選 “Android Emulator” 這一項. 因為它執行的速度太慢了)

Xamarin 專案的選項如下圖所示:

最好把位於 專案屬性-Android 選項 中的 “Use Fast Deployment” 勾選去掉.

注: 如果你想從別的 Android IDE 臨時用下 VS 的模擬器應急. 首先, 按照上面介紹的方法啟動模擬器; 然後, 把專案關掉, 保留模擬器繼續執行就可以. 其他 IDE 可以通過 ADB 呼叫 VS 的模擬器.

選好除錯目標後, 按 F5 , 你的應用就會發布到模擬器中. 就像平時除錯 VS 的程式碼一樣, 程式執行到斷點處停下, 然後你可以檢視堆疊, 變數等等. 現在, 大家都知道怎麼用模擬器除錯了吧? 那我們繼續將其他功能。

感測器模擬以及Visual Studio Android模擬器的其他能力

除了使用模擬器做為部署的目標板以外,你還可以使用模擬器的感測器模擬以及其他功能。 下面會給大家講解其中的一部分,順序不分先後。

縮放

你可以在開發機上(主機側)調整模擬器的顯示大小。模擬器的DPI值是由你的主機顯示器決定的,與縮放的大小無關。所以如果你覺得模擬器佔用了太多的桌面空間,那就縮小它。

使用模擬器右側的工具欄中的“Zoom”按鈕,就可以調整大小。

你也可以使用全屏模式,點選”Zoom”按鈕上方的“Fit to Screen”按鈕即可。

如果你想對模擬器中執行的程式進行截圖(比如說,使用windows自帶的截圖工具),要想取得最好的效果,就要把模擬器的縮放比例調到最大(也就是100%)。如果想要更好的效果,就要使用模擬器自帶的截圖工具了,這個工具我後面也會提到。

螢幕的朝向/旋轉

除非你的應用介面是固定不變的, 否則, 就應該測試下, 手機處在不同方向時, 應用介面翻轉後的各種效果, 如: 豎屏, 左橫屏, 右橫屏. 垂直工具欄上有兩個按鈕 “左旋轉”(Roate Left) 和 “右旋轉” (Rotate Right), 分別可將模擬器向左和向右旋轉. 旋轉後, 模擬器的尺寸不發生改變.

網路資訊

由於模擬器使用的是宿主機器上的網路連線, 所以網路部分不需要配置.

你可以點選垂直工具欄上的 “工具”(Tools) 按鈕, 然後在展開的”附加工具” (Additional Tools)皮膚中點選 “網路”(Network) 選項卡檢視網路配置資訊.

定位 (GPS)

如果你的應用跟導航, 地理圍欄(geofencing), 行走/騎行/駕駛有關. 那麼, “附加工具”(Additional Tools)皮膚中的 “定位”(Location) 選項卡里頭的定位跟模擬駕駛(driving simulation) 功能就會變得很有用 .

地圖可以拖動過, 放大縮小, 甚至可以查詢某個具體位置. 通過放置或移除地圖上的大頭針 (pin) 建立地圖上的點(map points). 左下角顯示的是座標. 上邊的工具欄的儲存按鈕, 可以將地圖上的點儲存為 XML 檔案. 有需要時候, 再重新載入進來.

除了 “Live”模式 , 這種由地圖上的點, 直接改變模擬器 GPS 位置外. 還有其他模式可以選擇! 比如你想在地圖上設定幾個點, 並在這些點之間模擬移動的效果 . 那就選 “Pin” 模式. 然後點工具欄最右邊的 Play 按鈕,就能模擬出從一點到另外一點的移動效果.。甚至, 還可以設定移動的速度(以秒為單位)。

最後,還有一個跟 “Pin” 模式差不多的 “Route” 模式。此模式也是模擬一點到另外一點的移動效果。不過多了點”曲折”。模擬器會自動計算出兩點之間的實際路徑,並以 1 秒鐘為時間間隔,為這條路徑建立隱形的點。而在這些點之間的移動速度,則取決於另外一個設定。該設定的選項有:“步行(Walking)” (5 公里/小時), “騎行(Biking)” (25 公里/小時), “限速(Speed Limit)” (在地圖上, 不同位置, 速度也不一樣), 和“快速(Fast)”。

加速感測器

如果你想測試應用對手機移動的響應效果, 那就開啟 “附加工具(Additional Tools)” 皮膚中的 “加速感測器(Accelerometer)” 。

在 3D 皮膚中, 直接按住裡面那個紅點, 朝你想模擬的方向拖動. 如果你的應用已經寫了處理移動事件的程式碼. 那它就能接收到手機移動的事件.

左下角的 X, Y, Z 值, 可以通過點選 “Reset” 按鈕重置. 也可以由: 直立豎屏(Portrait Standing), 直立橫屏(Landscape Standing), 平躺豎屏(Portrait Flat), 和 平躺橫屏(Landscape Flat), 這幾項來設定手機的初始朝向(Orientation)。

最後, 你可以點選右下角的 “Play” 按鈕模擬震動效果. 我們能看的到的震動效果, 實際上就是 X,Y,Z 這幾個值發生改變而已. 如果這幾個值不再急劇變化, 說明震動已經停止。

電源/電池模擬 (以及開關機按鈕)

假如,你的應用需要對電池的電量變化做出響應。 那麼你就會喜歡上 “附加工具(Additional Tools)” 皮膚中的 “電池(Battery)” 選項卡里面提供的功能.

裡面有一個滑動條, 用來設定電池的剩餘電量. 當你調整電量的時候, 右上角的電池圖示也會跟著改變. 你的應用也會做出相應的反應.

如果你把 “電池充電(Charging)” 勾選去掉, 過一段時間後, 模擬器的螢幕就會變黑(blank). 這個時間可以在 系統設定(Settings)-顯示(Display)-休眠(Sleep) 裡面設定. 點垂直選單欄的 電源開關按鈕(Power), 可以將模擬器從休眠中喚醒.

截圖

要實現對應用截圖,開啟”其他工具”,切換到”截圖”標籤。然後點選“捕捉”按鈕,這樣就可以實現截圖,並讓你預覽一下即刻所截圖。如果你打算儲存這個截圖,點選”儲存…”按鈕。如果不喜歡你剛才的截圖,忽略或者再次點選”捕捉”按鈕。

截圖工具總是實現(按照左下角所顯示的清晰度的)100%進行截圖的,不會理會縮放設定如何。同時總是正面截圖,不管你選擇何種影像旋轉方式。

通過拖拽安裝 APKs

APK 是 Android 的安裝檔案。要在 Visual Studio 模擬器上安裝 APK 檔案,直接把 APK 檔案拖到模擬器裡面就可以。安裝的時候,模擬器會提示 “正在複製檔案…”。安裝完畢,會有一個訊息框提示 “ xxx 檔案已經成功安裝到 Android 系統中”。要確保你的 APK 檔案是用 x86 模式生成的!

當然, 你也可以把其他型別的檔案(非 APK 檔案)拖到模擬器中,這些檔案會儲存到 SD 卡上。這也是我們接下來要講的內容

SD 卡

如果你的有向目標裝置的SD卡讀寫的需求,模擬器可以利用一個硬碟上的資料夾模擬這個SD卡.

要注意Android映象會使用一個獨立的VHD檔案來支援對SD卡的模擬. 所以如果你想要在你的開發機器上和SD卡傳輸檔案,你可以把這個VHD安裝到你的Windows上:關閉模擬器(以停止VM的執行),然後再Windows Explorer上找到VHD的位置,雙擊它就能安裝. VHD預設會位於下面的這兒路徑下面:

C:\Users\%username%\AppData \Local\Microsoft\XDE\Android\vsemu.sdcard.vhd

這樣VHD就被作為另外的一個驅動器安裝到了你的Windows上,你可以像使用其它的驅動器一樣來使用它. 在重啟模擬器之前,你必須解除安裝VHD,你可以通過在驅動器上右鍵選擇“彈出Eject”來實現這個步驟.

可以再映象中實現對SD卡的支援讓其它的內建Android應用和功能可以使用,比如瀏覽器下載和照相機應用——它為我帶來了下一項能力.

照相機

通常你可能會要使用應用裡面的照相機(使用一個合適的API),而我們支援這個功能. 你也可以直接使用內建的照相機應用. 當你在模擬器裡面啟動照相機時,你將會看到一個固定的影像,你可以獲取這個影像的快照,以模擬拍照.

音訊播放,鍵盤文字輸入…

當然模擬器理所當然還會提供其它的一些功能,儘管他們需要來自產品團隊的“努力” :-) 。在這裡我不會把所有的功能都列出來,單其中有兩個值得注意:

你可以在模擬器中使用你機器的鍵盤輸入文字

任何來自模擬器的音訊播放都可以通過你機器的音響收聽到

配置

在預覽版中,提供了2組預設配置:

典型的Android手機配置:5吋螢幕,295 DDI,720×1280,1024MB

典型的Android平板配置:7吋螢幕,315DPI,1080×1920,2048MB

你可以在預覽版中修改記憶體的分配,Hyper-V Manager的配置視窗中提供了配置“Startup RAM”的選項。注意,你也可以修改每個配置中使用的CPU核心數(預設值是2)。不過,我們還沒有對所有的可能配置進行測試。

我們的工作才剛剛開始,在後面的版本中我們會提供更多的功能,同時也希望大家在下面的這個調查問卷中反饋意見,以便於我們對需求進行排序。

看看內部實現原理

如果你對Visual Studio Android模擬器的實現原理感興趣,我可以簡單地回答這個問題,就是我們重用了其他產品的工作成果。在概念上,一個模擬器軟體可以分為以下4個部分:

虛擬機器(表示為一個vhd),用於模擬你使用的目標板,在這這裡目標機就是Android。我們先從Android Open Source Project (AOSP)上獲取到程式碼,並加以改進,將其配置為一個x86的虛擬映象,這樣就可以使用Visual Studio來進行快速的除錯。

Shell/Chrome,提供了使用者互動介面,可以用它來裝載虛擬映象並將其進行渲染顯示出來。可以把這個過程和遠端桌面做一下類比:其實你就是遠端連線到一個本地映象上。我們的工作就是從這裡開始,直接借鑑了Windows Phone模擬器(我們內部稱其為XDE)的shell/chrome。 然後根據Android的特殊需求,做了一些必要的修改。

虛擬化技術,XDE使用先虛擬化技術來裝載映象,這樣才能進行遠端連線和控制。Windows有深厚的虛擬化技術功底,我們正是使用了虛擬化技術Hyper-V來完成這項工作。

連線管道,VS和XDE需要通過連線管道來通訊,同樣的除錯引擎和虛擬映象也需要。這裡我們重用了XDE與Visual Studio之間現有的連線機制,同時也使用了Android Debug Bridge (ADB) 。

現在,再來看看目前這個應用的使用限制,我再次希望大家給我們反饋改進意見,我們會優先解決大家反饋的問題。

當前的使用限制

今天給大家分享的是早期的預覽版,這個版本中還有不少問題和Bug,我希望大家能把更多的問題反饋為我們。 同時這個版本還有不少已知的使用限制–大家趕緊把你們最想要的功能反饋給我們,我們會優先處理:

直接或間接使用OpenGL 2以及以上版本的應用程式,模擬器目前無法渲染顯示。這項功能不久就會支援,我們已經在內部版本中實現,用來會感覺非常流暢!

市面上有太多不同的Android版本。我們目前只支援 KitKat API 19(android-4.4.4_r1)。後續會支援更多版本…

如果你的APP使用了 Google Play Services 層,那麼這些應用不能在模擬器上直接執行。這是因為我們構建的Android映象沒有包含GMS包(我們目前還沒有獲取到相關的許可證)。

你需要在x86下重新編譯你的程式碼。如果你的程式碼只能在ARM下執行,或者使用了不能在x86下執行的第三方庫,那麼目前你的程式碼是無法在我們的模擬器上執行的。

你只能在支援Hyper-V的作業系統上安裝我們的模擬器。不支援Hyper-V的作業系統有Windows 7和其他非Windows系統,或者是在其他的虛擬機器上執行。

如說上面所提的限制是你所急需的,目前的解決辦法是使用真機來測試(或者另找一款更好的模擬器)。我們會在後面的版本中把上面的限制列表變短,所以請填寫調查問卷來幫助我們進行優先順序排序。

相關文章