Android模拟器是一个基于QEMU的应用程序。它可以提供一个虚拟的ARM移动设备。在此之上,您可以运行您的Android应用程序。它包括一套系统栈,下至内核级别,和一套预制的应用软件,包括拨号器。这些软件您都可以在您的应用程序中访问。它提供一套可替换的移动设备UI,可定制的键盘影射和多种命令行参数来控制模拟器的行为。
SDK中分布式的Android系统镜像包括Android linux内核的ARM机器码,本地库,Dalvik VM和多个Android包文件(比如Android框架和预制的应用程序)。模拟器的QEMU层为操作系统和您开发的应用程序提供符合ARM规范的二进制编译码。
添加定制的能力到基础的QEMU服务,Android模拟器支持很多硬件,包括:
一个ARMv5和一致的内存管理单元
一个16位的LCD显示器
一个或更多的键盘(一个Qwerty键盘和相关的电话触摸快捷键)
一块带有输出和输入能力的声音芯片
闪存
GSM模块,包括一个模拟的SIM卡
后面对各章节将讲解模拟器如何在开发平台上工作。
开始和停止模拟器
在开发和测试您的应用程序期间,您可以在模拟器里安装和运行您的应用程序。您可以从命令行启动Android模拟器,或者您把它作为您Eclipse开发环境的一部分来调用。在其它情况下,您可以指定启动参数来控制模拟器。启动参数会在本文其它部分描述。
您可以运行您的应用程序在一个单独的模拟器实例中,或者根据于您的需求在启动多个模拟器实例,并且同时在多个虚拟设备上。您可以使用模拟器内建的命令行工具在两台虚拟设备之间发起GSM呼叫或SMS通信。并且您可以在两台虚拟设备之间建立网络连接来发送数据。更多信息请参见模拟电话、模拟短信和模拟网络部分。
在命令行环境下启动模拟器,将路径切换到<your android sdk>/tools/目录,输入emulator 或者./emulator。这样可以初始化您的android系统并且您可以看到模拟器窗口。
如果您工作在Eclipse环境,ADT插件在您调试应用程序时可以自动安装您的应用程序并且启动模拟器。您可以在Run/Debug对话框Target标签页中指定启动参数。模拟器启动后,您可以按照文本后面的相关段落中的描述在命令行向模拟器发出命令。
如果您工作在非Eclipse环境中,请参见模拟器安装应用程序一节。
停止模拟器只要关闭模拟器窗口。
控制模拟器
您可以使用启动参数和命令行命令控制模拟器和典型的模拟器环境。
模拟器在运行时,您可以与模拟设备交互,就如同您有一部真机一样。当然,您只能用鼠标指针来模拟触摸屏的触摸动作了。同样,您可以用鼠标模拟键盘动作。
下表列出了模拟器按键和键盘按键的影射关系。
模拟器设备按键 | 键盘键 |
Home | HOME |
Menu(左软键) | F2 或者 Page-up |
Star(右软键) | Shift-F2 或者 Page-down |
Back | ESC |
Call/dial button | F3 |
Hangup/end call button | F4 |
Search | F5 |
电源按钮 | F7 |
音频音量增加旋钮 | KEYPAD_PLUS, Ctrl-5 |
音频音量减少旋钮 | KEYPAD_MINUS, Ctrl-F6 |
摄像机按钮 | Ctrl-KEYPAD_5, Ctrl-F3 |
切换前一布局器 | KEYPAD_7, F11 |
切换后一布局器 | KEYPAD_9, F12 |
网络乒乓开关 | F8 |
代码特性开关 | F9(仅在 |
全屏模式 | Alt-Enter |
轨迹球模式 | Ctrl-T |
DPad left/up/right/down | KEYPAD_4/8/6/2 |
导航面板中间按键 | KEYPAD_5 |
环形旋钮 | KEYPAD_MULTIPLY(*) / KEYPAD_DIVIDE(/) |
注意:您开发机的键盘必须关闭NumLock。
模拟器启动参数
模拟器支持多种启动参数。您可以配置这些参数来控制模拟器行为和外观。下面是模拟器参数的用法。
emulator [-<option> [<value>]] ... [-<qemu args>]
下面的表总结了可用的参数
Category | Option | Description | Comments |
Help | -help | 打印模拟器参数列表。 |
|
-help-all | 打印所有启动参数明细。 |
| |
-help-<option> | 打印指定启动参数的信息。 |
| |
-help-debug-tags | 打印所有被-debug <tags>打开的列表。 |
| |
-help-disk-images | 打印正在使用的磁盘镜像信息。 |
| |
-help-environment | 打印模拟器环境变量信息。 |
| |
-help-keys | 打印当前的键盘映射。 |
| |
-help-keyset-file | 打印一个自定义的键盘映射文件的定义。 |
| |
Disk Images | -cache <filepath> | 使用<filepath> 指定网络缓存分区镜像。 | 自定义,您可以指定一个当前工作目录的相对路径。如果没有指定缓存文件,模拟器会指定一个零时文件作为缓存文件。更多信息请参考-help-disk-images. |
-data <filepath> | 使用<filepath>作为用户数据磁盘镜像。 | 自定义,您可以指定一个当前工作目录的相对路径。如果-data没有被使用,模拟器会在<datadir>指定的目录下寻找名叫"userdata-qemu.img"的镜像文件。默认情况下,模拟器会寻找~/.android (on Linux/Mac)或者C:/Documents and Settings/<user>/Local Settings/Application Data/Android (on Windows)。 如果您使用了-data <filepath>,但是文件并不存在,模拟器将创建同名文件。 更多信息请参见运行多个模拟器实例和-help-disk-images。 | |
-image <filepath> | 使用<filepath>作为系统镜像。 | 自定义,您可以指定一个当前工作目录的相对路径。默认为<system>/system.img。 | |
-initdata <filepath> | 重写用户数据镜像时,(使用 -wipe-data),复制此文件内容到新用户数据文件镜像中。默认方式下,模拟器拷贝<system>/userdata.img。 | 自定义,您可以指定一个当前工作目录的相对路径。参见-wipe-data。 更多信息请参见-help-disk-images。 | |
-kernel <filepath> | 使用<filepath>作为模拟器内核。 | 自定义,您可以指定一个当前工作目录的相对路径。 | |
-nocache | 启动模拟器时无缓存分区。 | 参见-cache <file>。 | |
-ramdisk <filepath> | 使用<filepath>作为虚拟内存镜像。 | 默认为<system>/ramdisk.img. 自定义,您可以指定一个当前工作目录的相对路径。更多信息请参见-help-disk-images。 | |
-sdcard <filepath> | 使用<file>作为SD卡镜像。 | 默认为<system>/sdcard.img. 自定义,您可以指定一个当前工作目录的相对路径。更多信息请参见-help-disk-images。 | |
-system <dirpath> | 在指定的<dir>下搜索系统、虚拟内存和用户数据镜像文件。 | <dir>为当前路径的相对目录。 | |
-wipe-data | 重至用户数据镜像文件。(that is, the file specified by -datadir and -data, or the default file). 模拟器删除所有用户数据,然后复制右-inidata参数指定的数据到镜像文件,在启动之前。 | 参见-initdata. 更多信息请参见-help-disk-images。 | |
Debug | -debug <tags> | 开启/关闭指定tag的调试信息。 | <tags>是一个被空格/逗号/纵列所分割的调试组建名称列表。更多信息参见-help-debug-tags。 |
-debug-<tag> | 开启/关闭指定tag的调试信息。 | 使用-help-debug-tags获得您可以指定为<tag>的调试组件列表。 | |
-debug-no-<tag> | 关闭指定tag的调试信息。 | ||
-logcat <logtags> | 打开指定tag的日志输出。 | 如果环境变量ANDROID_LOG_TAGS被指定且不为空,她的值将成为日志输出的默认值。 | |
-shell | 创建一个拥有root权限的命令行窗口。 | 即使模拟器的UI界面无法使用了,您依然可以使用命令行窗口。按Ctr-c键中断模拟器运行。 | |
-shell-serial <device> | 打开具有root权限的脚本窗口。 | <device>必须是一个QEMU类型的设备。参见'serial -dev'在 http://www.bellard.org/qemu/qemu-doc.html#SEC10上关于设备类型的列表信息。 这儿有一些例子: · -shell-serial stdio is identical to -shell · -shell-serial tcp::4444,server,nowait 让您的shell可以通过4444端口通讯。 · -shell-serial fdpair:3:6 让模拟器可以使用3 (in)和6(out)磁碟机。 · -shell-serial fdpair:0:1 uses the normal stdin and stdout fds, except that QEMU won't tty-cook the data. | |
-show-kernel <name> | 显示内核信息。 |
| |
-trace <name> | Enable code profiling (press F9 to start), written to a specified file. |
| |
-verbose | 开启冗长输出。 | Equivalent to -debug-init. 您可以定义ANDROID_VERBOSE环境变量作为冗长输出参数。定义你想用到的参数,用逗号分割。这样可以省略像-debug-<tags>这样的参数。 下面是一个设置ANDROID_VERBOSE的例子,它带有-debug-init和 -debug-modem 参数: ANDROID_VERBOSE=init,modem 更多信息参见<-help-debug-tags>. | |
Media | -audio <backend> | 使用指定的音频后端。 |
|
-audio-in <backend> | 使用指定的音频输入后端。 |
| |
-audio-out <backend> | 使用指定的音频输出后端。 |
| |
-noaudio | 在当前虚拟机实例中关闭音频支持。 |
| |
-radio <device> | 重新定向收音机接口到本地的字节设备。 |
| |
-useaudio | 打开模拟器实例的音频支持。 | 默认为打开。 | |
Network | -dns-server <servers> | 使用指定的DNS服务器。 | <servers>必须是以逗号分割,多于4个的服务器名或IP地址。 |
-http-proxy <proxy> | 配置TCP连接使用HTTP/HTTPS代理。 | <proxy>必须符合以下格式: 前缀http://可以被忽略。如果-http-proxy <proxy>未被指定,模拟器将寻找http_proxy环境变量,并且自动寻找所有符号格式要求的<proxy> 值。 | |
-netdelay <delay> | 设置网络延迟 | 默认值为none。参见Network Delay Emulation中关于<delay>的值。 | |
-netfast | 快捷的 -netspeed full -netdelay none |
| |
-netspeed <speed> | 指定模拟器网络速度为<speed>. | 默认值为full。参见表格Network Speed Emulation 中的<speed>值。 | |
-port <port> | 指定模拟器网络端口为<port>. | 控制台端口号必须介于5554和5584之间,并且<port>+1必须留作ADB使用。 | |
-report-console <socket> | 启动前向第三方同志此模拟器实例的网络端口。 | <socket> 必须是以下几种格式 tcp:<port>[,server][,max=<seconds>] 更多信息参见 -help-report-console | |
System | -cpu-delay <delay> | 降低模拟器CPU的速度到<delay>。 | <delay>支持0到100的整数。 注意<delay>与具体的时钟或其他的绝对频率无关。它只表现为一种抽象的,相对于当前模拟器运行状况的速度调节。 |
-gps <device> | 重定向NMEA GPS到字节设备。 | 使用此参数通知模拟器模拟一个NMEA-compatible GPS,连接到一个扩展的设备或socket端口。<device>格式必须符合QEMU-specific所指定的设备格式。更多信息参见'serial -dev' 和 http://www.bellard.org/qemu/qemu-doc.html#SEC10. | |
-nojni | 在Dalvik运行时关闭JNI检查 |
| |
-qemu | 传递参数到qemu。 |
| |
-qemu -h | 关闭qemu帮助。 | ||
-radio <device> | 重定向录音机模块到制定的字符设备。 | <device>格式必须符合QEMU规定的序列设备。详情参见http://www.bellard.org/qemu/qemu-doc.html#SEC10. | |
-timezone <timezone> | 设定模拟器时区为<timezone>,替换为系统时区。 | <timezone>必须按照时区格式指定。比如: "America/Los_Angeles" | |
-version | 显示模拟器版本号。 |
| |
UI | -dpi-device <dpi> | 修改模拟器的分辨率适配物理设备。 | 默认值为165。参见-scale. |
-no-boot-anim | 关闭模拟器启动时的动画。 | 禁用启动动画可以加快启动速度。 | |
-no-window | 关闭模拟器的绘制窗口。 |
| |
-scale <scale> | 调整模拟器窗口。 | <scale> 是介于0.1到3的数字,它是调整屏幕的比例因子。您也可以指定一个DPI值,在添加dpi前缀的情况下。Auto参数告诉模拟器选择自己最合适的尺寸。 | |
-raw-keys | 关闭Unicode键盘reverse-mapping. |
| |
-noskin | 不使用任何模拟器皮肤。 |
| |
-keyset <file> | 用指定的键盘设置文件代替默认。 | 指定宿主键盘和模拟器之间的键盘映射文件。更多信息参见-help-keyset。 | |
-onion <image> | 用图片覆盖屏幕。 | 不支持JPEG,只支持PNG | |
-onion-alpha <percent> | 指定onion皮肤透明值(百分比) | 默认为50. | |
-onion-rotation <position> | 指定onion皮肤旋转。 | <position> 必须是 0, 1, 2, 3中的一个。 | |
-skin <skinID> | 启动模拟器,搭配指定皮肤。 | The SDK includes a choice of four skins: · HVGA-L (480x320, landscape) · HVGA-P (320x480, portrait) (default) · QVGA-L (320x240, landscape) · QVGA-P (240x320, portrait) | |
-skindir <dir> | 在指定目录<dir>下搜索皮肤。 |
|