Visual Studio 2015下的Android模拟器介绍

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

Microsoft 本周发布了 Visual Studio 2015 预览版, 里面包含 Android 开发工具. 安装的时候, 如果选 Android 开发, Visual Studio 会把调试 Android 应用程序用的 Visual Studio 模拟器也装上。

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 LocalMicrosoftXDEAndroidvsemu.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系统,或者是在其他的虚拟机上运行。

如说上面所提的限制是你所急需的,目前的解决办法是使用真机来测试(或者另找一款更好的模拟器)。我们会在后面的版本中把上面的限制列表变短,所以请填写调查问卷来帮助我们进行优先级排序。