3.3 为应用测试设置Android虚拟设备(AVD)
Daniel Fowler
3.3.1 问题
成功的应用程序必须运行于各种不同的Android设备及其版本上,所以必须在一系列设备上进行测试。
3.3.2 解决方案
使用Android SDK的设备模拟工具包配置设备和操作系统的组合,通过在各种组合上的测试能够减少与设备硬件差异相关的问题。
3.3.3 讨论
Android设备从廉价到“高规格/高价值”,覆盖了广泛市场,出现在市场上也已经有数年之久。因此,市面上使用的设备有着广泛的硬件选择和操作系统版本。成功的应用程序就应该能够在这么广泛的设备上运行,而应用开发人员只能针对很小范围内的实际设备运行程序。幸运的是,开发人员可以使用Android虚拟设备(AVD)来提高对应用程序的信心。
编译后的应用程序可以在物理设备或者虚拟设备上测试。AVD是Android平台在主机(通常是开发机器)上的模拟。
采用AVD对测试进行了简化,这基于如下原因:
可以创建多种AVD配置,在不同版本的Android上测试应用程序。
可以使用不同的(模拟)硬件配置,例如GPS或者无GPS。
在Eclipse中单击Run按钮时,可自动启动AVD并安装编译后的应用程序。
AVD具有比物理设备更多的Android版本和硬件版本组合,可在这种组合环境上测试应用。
在AVD上测试大大地减少了在物理上进行的测试。
AVD可以和物理设备一同使用。
不必为了导致错误情况而对物理设备进行限制——例如,如果你打算在没有安全数码卡(Secure Digital,SD)的设备上测试,只需建立一个没有SD卡的AVD就行了。
AVD可以模拟网络事件,而不需要花费使用物理设备的相关成本;例如,可以模拟电话呼叫或者在两个AVD之间发送SMS。
可以在不移动桌面的情况下,模拟来自不同物理位置的GPS数据。
当应用程序用户报告缺陷时,可以尝试用AVD模拟他们的硬件配置。
请注意,在旧的开发机器上以及模拟较大的Android设备时,AVD的性能将低于物理设备。
可以用SDK Manager程序配置AVD(直接从文件系统或者Eclipse中打开),也可以从命令行上创建AVD。
为了用SDK Manager创建AVD,必须首先加载该程序。从Eclipse中选择菜单栏上的Window(窗口),然后选择Android SDK and AVD Manager,如图3-1所示。
也可以从文件系统中直接启动程序。例如,在Windows中,打开C:Program FilesAndroidandroid-sdkSDK Manager.exe。如果直接从文件系统启动程序,SDK Manager将会检查SDK更新,这时选择Cancel(取消)进入主窗口,窗口标题为Android SDK and AVD Manager(见图3-2)。如果从Eclipse打开程序,主窗口将会显示,而不会检查SDK更新。
主窗口的左侧列出了“Virtual Devices”(虚拟设备)、“Installed packages”(已安装程序包)和“Available packages”(可用程序包)。“Virtual Devices”应该已经被选中;否则,选中它,可以在右边的表格中列出所有现有的AVD。刚刚安装Android SDK时不会列出任何AVD。
选择New按钮创建AVD,将加载“Create new Android Virtual Device (AVD)”(创建新的Android虚拟设备)窗口(见图3-3)。
如下字段用于定义AVD:
Name
为新的模拟Android设备取一个名称。使用描述性的名称,例如,如果你要模拟一个使用2.1版操作系统和中分辨率屏幕(HVGA)的设备,取名为Android-v2.1- HVGA要好于AndroidDevice。
Target
这是运行于模拟设备上的Android操作系统版本。对于运行版本2.1的设备,这个字段可以设置为“Android 2.1-update1 - API Level 7”。
SD Card
这个字段指定设备模拟的SD卡大小,或者选择现有的SD卡映像(可以在不同的AVD模拟之间共享SD卡数据)。输入以兆字节(MB)为单位的卡容量,指定新的SD卡。记住,输入的数字越大,在主计算机系统上创建的模拟SD卡的文件就越大。作为替代,可以选择File选项并浏览现有的SD卡映像(在Windows机器上,sdcard.img文件可以在登录用户文件夹中的.android目录下的avd子目录中找到)。
Snapshot
如果你希望模拟设备的运行时状态在会话之间持续保存,选中Enabled复选框,当你在执行长时间运行的一系列测试,而关闭AVD你又不希望从头开始测试时,这个选项很有用。这个选项还加速了AVD的启动。
Skin
选择设备的屏幕尺寸;显示一个常见屏幕尺寸的列表(例如HVGA、QVGA等)。该列表根据操作系统版本而有所不同。你也可以输入自定义的分辨率。
Hardware
Hardware(硬件)选项下的表格用于配置AVD具备或者不具备某些硬件特性。首先用New按钮将硬件特性添加到表格中(有几个硬件特性将添加到表格中,并根据Target选项的选择自动成为默认),这时将会打开一个对话框,用于选择硬件属性(见图3-4)。
例如,选择“GPS support”(GPS支持),然后选择“OK”。选择“GPS support in the table”旁边的“yes”,将其修改为“no”,这样AVD将不支持GPS(见图3-5)。
表3-1列出了AVD支持的属性。
定义了必要的字段之后,单击Create AVD按钮生成AVD。现在,AVD出现在Android SDK and AVD Manager窗口中(见图3-6)。
现在可以使用Start按钮启动这个AVD,也可以在项目配置中选择它,在开发中测试应用程序。选择Start按钮时,显示 Launch Options(启动选项)窗口(见图3-7)。
启动选项如下:
将显示缩放为实际尺寸(Scale the display to real size)
在较大的计算机显示器上,通常不需要修改AVD比例。Android屏幕的DPI值高于计算机显示器的DPI值,因此,AVD屏幕显得比物理设备大。如果有必要,可以降低比例以节约屏幕空间。使用这个选项可以使AVD在计算机显示器上以接近真实的屏幕显示。选项中的值必须设置,以免AVD屏幕和键盘尺寸过小而无法使用。
清除用户数据(Wipe user data)
当AVD启动时,用户数据文件被重置,前一次运行AVD时生成的用户数据将会丢失。
从快照启动(Launch from snapshot)
如果AVD启用了Snapshot选项,第一次启动之后,后续的启动将会更快。AVD从一个快照中加载,不需要再次启动Android操作系统。但是当AVD关闭时,因为必须将快照写到硬盘,关机过程将会较长。
保存到快照(Save to snapshot)
AVD关闭时,当前状态将被保存,以加快下一次的启动;但是因为快照要写回磁盘,关闭的时间较长。如果你已经有了快照,可以清除该选项的选择,这样关闭AVD时也同样很快,但是从上一个快照以来的修改将会丢失。
使用Launch按钮启动AVD。一旦加载,AVD就可以像其他Android设备一样使用,由主计算机的键盘和鼠标驱动,见图3-8。
在Windows上启动时的错误消息(Error message on Windows when launching)
试图从Windows安装中启动AVD时,可能出现一个以“invalid command-line parameter”(无效命令行参数)开始的错误(见图3-9)。
为了修复这个问题,将路径改为Android SDK目录,不包含任何空格。默认的SDK安装路径为C:Program FilesAndroid。Program Files中的空格必须删除。为了维护有效的目录名称,Program Files应该转换为Microsoft DOS格式(亦称8.3格式)。这通常是前6个字母大写加上~符号和数字1,即PROGRA~1。如果有其他目录名以Program(后面有空格)开始,数字需要递增。要查看Program Files的DOS格式,可以在你的机器上打开命令提示符界面(开始→所有程序→附件→命令提示符),转到根目录(即输入cd并按回车)并运行dir/x命令,则会看到DOS格式的目录名称将显示在其全名旁边(见图3-10)。
在Eclipse中,使用Windows(菜单)→Preferences(首选项)菜单并选择Android;在SDK Location字段中将Program Files改为DOS版本(见图3-11)。