Visual Studio 2015下的Android模擬器介紹

2014-12-11 10:00:28來源:oschina作者:

Microsoft 本周發(fā)布了 Visual Studio 2015 預覽版, 里面包含 Android 開發(fā)工具. 安裝的時候, 如果選 Android 開發(fā), Visual Studio 會把調試 Android 應用程序用的 Visual Studio 模擬器也裝上。

Microsoft 本周發(fā)布了 Visual Studio 2015 預覽版, 里面包含 Android 開發(fā)工具. 安裝的時候, 如果選 Android 開發(fā), Visual Studio 會把調試 Android 應用程序用的 Visual Studio 模擬器也裝上.

\

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

Android 模擬器存在的必要性

我們知道, 模擬器在 編程-編譯-調試 開發(fā)周期中, 扮演著很重要的角色(甚至比物理設備還重要). 所以我們相信, 今天發(fā)布的這個模擬器, 在開發(fā)中是必不可少的.

有了優(yōu)秀的模擬器, 不代表我們就不需要物理設備了. 反之亦然, 他們之間其實是互補的關系.

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

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

測試某些硬件問題. 比如, 你想測試下游戲的觸摸靈敏度, 外放的音效, 或者調試 OEM 設備的 Bug , 這些測試只能在物理設備上進行.

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

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

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

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

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

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

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

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

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

對那些要使用Windows Phone模擬器(基于Hyper-V)的開發(fā)者來說就更為苦惱?偛荒転橐驗橐獪y試跨平臺的代碼,不斷的重啟和配置電腦設置吧。

額外的購買和安裝步驟。如果你已經在使用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 的模擬器應急. 首先, 按照上面介紹的方法啟動模擬器; 然后, 把項目關掉, 保留模擬器繼續(xù)運行就可以. 其他 IDE 可以通過 ADB 調用 VS 的模擬器.

選好調試目標后, 按 F5 , 你的應用就會發(fā)布到模擬器中. 就像平時調試 VS 的代碼一樣, 程序運行到斷點處停下, 然后你可以查看堆棧, 變量等等. 現(xiàn)在, 大家都知道怎么用模擬器調試了吧? 那我們繼續(xù)將其他功能。

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

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

\

縮放

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

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

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

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

屏幕的朝向/旋轉

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

網(wǎng)絡信息

由于模擬器使用的是宿主機器上的網(wǎng)絡連接, 所以網(wǎng)絡部分不需要配置.

你可以點擊垂直工具欄上的 “工具”(Tools) 按鈕, 然后在展開的”附加工具” (Additional Tools)面板中點擊 “網(wǎng)絡”(Network) 選項卡查看網(wǎng)絡配置信息.

\

定位 (GPS)

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

\

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

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

最后,還有一個跟 “Pin” 模式差不多的 “Route” 模式。此模式也是模擬一點到另外一點的移動效果。不過多了點”曲折”。模擬器會自動計算出兩點之間的實際路徑,并以 1 秒鐘為時間間隔,為這條路徑創(chuàng)建隱形的點。而在這些點之間的移動速度,則取決于另外一個設置。該設置的選項有:“步行(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 這幾個值發(fā)生改變而已. 如果這幾個值不再急劇變化, 說明震動已經停止。

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

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

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

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

\

截屏

要實現(xiàn)對應用截屏,打開”其他工具”,切換到”截屏”標簽。然后點擊“捕捉”按鈕,這樣就可以實現(xiàn)截屏,并讓你預覽一下即刻所截屏。如果你打算保存這個截屏,點擊”保存…”按鈕。如果不喜歡你剛才的截屏,忽略或者再次點擊”捕捉”按鈕。

\

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

通過拖拽安裝 APKs

APK 是 Android 的安裝文件。要在 Visual Studio 模擬器上安裝 APK 文件,直接把 APK 文件拖到模擬器里面就可以。安裝的時候,模擬器會提示 “正在復制文件…”。安裝完畢,會有一個消息框提示 “ xxx 文件已經成功安裝到 Android 系統(tǒng)中”。要確保你的 APK 文件是用 x86 模式生成的!

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

SD 卡

如果你的有向目標設備的SD卡讀寫的需求,模擬器可以利用一個硬盤上的文件夾模擬這個SD卡.

要注意Android鏡像會使用一個獨立的VHD文件來支持對SD卡的模擬. 所以如果你想要在你的開發(fā)機器上和SD卡傳輸文件,你可以把這個VHD安裝到你的Windows上:關閉模擬器(以停止VM的運行),然后再Windows Explorer上找到VHD的位置,雙擊它就能安裝. VHD默認會位于下面的這兒路徑下面:

C:Users\%username%AppData LocalMicrosoftXDEAndroidvsemu.sdcard.vhd

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

可以再鏡像中實現(xiàn)對SD卡的支持讓其它的內置Android應用和功能可以使用,比如瀏覽器下載和照相機應用——它為我?guī)砹讼乱豁椖芰?

照相機

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

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

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

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

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

配置

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

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

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

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

\

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

看看內部實現(xiàn)原理

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

虛擬機(表示為一個vhd),用于模擬你使用的目標板,在這這里目標機就是Android。我們先從Android Open Source Project (AOSP)上獲取到代碼,并加以改進,將其配置為一個x86的虛擬鏡像,這樣就可以使用Visual Studio來進行快速的調試。

Shell/Chrome,提供了用戶交互界面,可以用它來裝載虛擬鏡像并將其進行渲染顯示出來?梢园堰@個過程和遠程桌面做一下類比:其實你就是遠程連接到一個本地鏡像上。我們的工作就是從這里開始,直接借鑒了Windows Phone模擬器(我們內部稱其為XDE)的shell/chrome。 然后根據(jù)Android的特殊需求,做了一些必要的修改。

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

連接管道,VS和XDE需要通過連接管道來通信,同樣的調試引擎和虛擬鏡像也需要。這里我們重用了XDE與Visual Studio之間現(xiàn)有的連接機制,同時也使用了Android Debug Bridge (ADB) 。

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

當前的使用限制

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

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

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

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

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

你只能在支持Hyper-V的操作系統(tǒng)上安裝我們的模擬器。不支持Hyper-V的操作系統(tǒng)有Windows 7和其他非Windows系統(tǒng),或者是在其他的虛擬機上運行。

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