注:其中部分内容参考网上资源
1 、 Android 模拟器介绍
Android 中提供了一个模拟器来模拟 ARM 核的移动设备。 Android 的模拟器 是基于 QEMU 开发的, QEMU 是一个有名的开源虚拟机项目(详见 http://bellard.org/qemu/ ),它可以提供一个虚拟的 ARM 移动设备。 Android 模拟器被命名为 goldfish ,用来 模拟包括下面一些功能的 ARM SoC:
* ARM926ej-S CPU
* Thumb support
* MMC
* RTC
* Keyboard
* USB Gadget
* Framebuffer
* TTY driver
* NAND FLASH
Android 模拟器所对应的源代码主要在 external/qemu 目录下。如果你想将 Android 移植到其 他设备上,熟悉它目前所针对的模拟器环境可以提供一些参考。
对于应用程序的开发者,模拟器 提供了很多开发和测试时的便利。无论在 Windows 下还是 Linux 下, Android 模拟器都可以顺利运行,并且 Google 提供了 Eclipse 插件,可将模拟器集成到 Eclipse 的 IDE 环境。当然,你也可以从命令行启动 Android 模拟器。
这款模拟器功能非常齐全,电话 本、通话等功能都可正常使用(当然你没办法真的从这里打电话)。甚至其内置的浏览器和 Google Maps 都可以联网。用户可以使用键盘输入,鼠标点击模拟器按键输入,甚至还可以使用鼠标点击、拖动屏幕进 行操纵。
当然模拟器毕竟是模拟器,和真 实的机子还是存在差别的,
android 模拟器和真机的不同之处:
* 不支持呼叫和接听实际来电;但可以通过控制台模拟电话呼叫 ( 呼入和呼出 )
* 不支持 USB 连接
* 不支持相机 / 视频捕捉
* 不支持音频输入 ( 捕捉 ) ;但支持输出 ( 重放 )
* 不支持扩展耳机
* 不能确定连接状态
* 不能确定电池电量水平和交流充电状态
* 不能确定 SD 卡的插入 / 弹出
* 不支持蓝牙
2 、创建和启动 Android 模拟器
要玩 GPhone 的模拟器,当然需要先去 http://developer.android.com/sdk ( 如果打不开就用 http://androidappdocs.appspot.com/sdk/index.html ) 上面下载 Android 的 SDK ,解压出来后在 SDK 的根目录下有一个 tools 文件夹,里面就是模拟器和一些非常有用的工具。( SDK 详细的安装过程请参照 http://blog.csdn.net/magicyu2/archive/2009/11/02/4755747.aspx )
要正确的启动模拟,你必须先要 创建一个 AVD( Android Virtual Device 虚拟设备 ) ,你可以利用 AVD 创建基于不同版本 的模拟器,下面就介绍如何创建 AVD :
(1) 查看当前支持版本 ( 在列出的版本中我们需要记住 id 值,这个值在第 2 步中使用 ) :
magicyu@magicyu-desktop:~$ android list target
你可以看到几个 Available Android targets ,比如: Name: Android 1.6 ,他们有各自的 id 号。
(2) 创建 AVD :
magicyu@magicyu-desktop:~$ android create avd -n magicyu -t 2
-n 后面接需要创建 avd 的名字, -t 后面接需要创建虚拟器的类型, 2 即为步骤( 1 )中得到的类型 id 号。
(3) 查看是否创建成功 ( 如果成功会显示刚才我们创建的 avd 信息 ) :
magicyu@magicyu-desktop:~$ android list avd
(4) 启动模拟器:
magicyu@magicyu-desktop:~$ emulator @magicyu 或 者
emulator -avd magicyu
其中 @ 和 -avd 后接的是你创建过的 avd 名字
(5) 选择启动的皮肤
magicyu@magicyu-desktop:~$ emulator -avd magicyu -skin QVGA
skin 后面接所要 启动皮肤的类型,所有的类型可以在 <SDK>/ platforms/android-1.*/skins 目录下找到, * 为所指的版本。如在 1.6 版本的 SDK 下有 HVGA , QVGA , WVGA800 , WVGA854 几种。按 Ctrl+F11 ,可以直接改变模拟器的横纵摆放。
当然 AVD 也可以在 Eclipse 中创建和启动。关于 Eclipse+ADT+SDK 的安装请参见 http://blog.csdn.net/magicyu2/archive/2009/11/02/4755747.aspx 。
运行 Eclipse , Window->Android SDK and AVD Manager ,就能得到如下的界面,选择新建即可新建一 个 AVD 。
3 、 Android 模拟器的一些工具
( 1 ) adb:
ADB(Android Debug Bridge) 是 Android 提供的一个通用的调试工具,借助这个工具,我们可以管理设备或手机模拟器的状态还可以进行以下的操 作:
a 、快速更新设备或 手机模拟器中的代码,如应用或 Android 系统升级;
b 、在设备上运行 shell 命令;
c 、管理设备或手机 模拟器上的预定端口;
d 、在设备或手机模 拟器上复制或粘贴文件
一些常用的操作:
进入 Shell: adb shell
通过上面的命令,就可以进入设 备或模拟器的 shell 环境中,在这个 Linux Shell 中,你可以执行各种 Linux 的命令,另外如果只想执行一条 shell 命令,可以采用以下的方式:
adb shell [command]
如: adb shell dmesg 会打印出内核的调试信息。
(Android 的 linux shell 做了大量精简,很多 linux 常用指令都不支持 )
上传文件 : adb push <PC 文件 > </tmp/...>
下载文件 : adb pull </tmp/...> <PC 文件 >
安装程序 : adb install <*.apk>
卸载软件 : adb shell rm /data/app/<*.apk>
补充一点,通过 adb 安装的软件 (*.apk) 都在 "/data/app/" 目录下,所以安装时不必制定路径,卸载只需要简单的执行 "rm" 就行。
结束 adb: adb kill-server
显示 android 模拟器状态 :
adb devices ( 端口信息 )
adb get-product ( 设备型号 )
adb get-serialno ( 序列号 )
等待正在运行的设备 : adb wait-for-device
端口转发 : adb forward adb forward tcp:5555 tcp:1234
( 将默认端口 TCP 5555 转发到 1234 端口上 )
查看 bug 报告 : adb bugreport
adb shell sqlite3 访问数据库 SQLite3
adb shell logcat -b radio 记录无线通讯日志: 一般来说,无线通讯的日志非常多,在运行时 没必要去记录,但我们还是可以通过命令,设置记录
应用程序配置文件 :
"AndroidManifest.xml" 中
"<category android:name="android.intent.category.LAUNCHER" />"
决定是否应用程序是否显示在 Panel 上
( 2 ) am 指令 ( 在 shell 内使用 am 来加载 android 应用 ):
am [start|instrument]
am start [-a <ACTION>]
[-d <DATA_URI>]
[-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e <EXTRA_KEY> <EXTRA_VALUE> [-e <EXTRA_KEY> <EXTRA_VALUE> ...]
[-n <COMPONENT>] [-D] [<URI>]
am instrument [-e <ARG_NAME> <ARG_VALUE>]
[-p <PROF_FILE>]
[-w] <COMPONENT>
启动浏览器 :
am start -a android.intent.action.VIEW -d http://www.google.cn/
拨打电话 :
am start -a android.intent.action.CALL -d tel:10086
启动 google map 直接定位到北京 :
am start -a android.intent.action.VIEW geo:0,0?q=beijing
( 3 )为模拟器加上 SD 卡:
emulator -sdcard <path>/sdcard.img
下面我们再来说说如何创建 "sdcard.img" 文件:
“tools” 目录 下还有另外一个很好用的工具 mksdcard ,一看名字就知 道 ——make sdcard 。对,就用它来创建一个 “SD 卡 ” 。
命令为:
mksdcard 1024M D:/sdcard.img
OK, 这样一个容量 为 1G 的 SD 卡就创建完毕了。
使用 SDCard:
创建 : mksdcard <1024M> <sdcard.img>
(bytes(default) , K , M)
连接到模拟器 : emulator -sdcard <path/sdcard.img>
传文件到 SDCard: adb push < 目录 /audio.mp3> </sdcard/audio.mp3>
( 4 ) Android 模拟器打电话发短信
GPhone 的模拟 器有个特有的号码: 15555218135 ,这个就类似我们 实体手机的 SIM 卡号码啦。要实现拨号,用手机?当 然不行!
更简单,三步:
1. 打开终端
2. 连接 : telnet localhost 5554 ( 5554 是你打开模拟器后上面显示的数字)
3. 命令 :gsm call 15555218135
look !是不是模 拟器上显示来电了?接听 / 挂断和实体手机一样。
发短信也一样简单,重复上面 1 , 2 两步,第三部命令改一下:
sms send 15555218135 Hello,this is a Message.
4 、 Android 模拟器主要命令参数介绍
emulator [-<option> [<value>]] ... [-<qemu args>]
下面的 表总结了可用的参数
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://<server>:<port >
http://<username>:<password>@<server>:<port > 前缀 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>]
unix:<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" , "Europe/Paris"
-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> 启动模拟器,搭配指定皮肤。
-skindir <dir> 在指定目录 <dir> 下搜索皮肤