【转】使用命令行方式创建和启动android模拟器

原文网址:http://blog.csdn.net/tiandinilv/article/details/8953001

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。

 

eclipse_create_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>下搜索皮肤

 

转载于:https://www.cnblogs.com/wi100sh/p/4338209.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LPC1768的SPI通讯

SPI是一种全双工串行接口&#xff0c;可处理多个连接到指定总线上的主机和从机。在数据传输过程中总线上只能有一个主机和一个从机通信。在数据传输中&#xff0c;主机总是会向从机发送一帧8到16个位的数据&#xff0c;而从机也总会向主机发送一帧字节数据 使用代码如下 void S…

文本显示变量_几千个IO状态显示.十几分钟搞定实例

工程上常会在一个或者数个界面中对所有IO点监控&#xff0c;很多小伙伴用一一映射的传统方法来实现&#xff0c;在超小型项目中实用性较强&#xff0c;在稍微大一点的项目中实现起来效率低还经常出错。本文旨在分享有价值的实际经验&#xff0c;供小伙伴们参考。在实现监控前要…

TabBarController创建及使用方法简介

TabBarController创建及使用方法简介 大致讲解一下TabBarController的创建过程&#xff1a; 首先&#xff0c;我们需要一些视图&#xff0c;如创建UIControllerView类型的view1&#xff0c;view2&#xff0c;view3. 然后&#xff0c;我们需要创建 一个UITabBarController类型的…

华为gre隧道全部跑静态路由

最终实现&#xff1a; 1、pc1能用nat上网ping能pc3 2、pc1能通过gre访问pc2 3、全部用静态路由做&#xff0c;没有用ospf&#xff0c;如果要用ospf&#xff0c;那么两边除了路由器上跑ospf&#xff0c;核心交换机也得用ospf r2配置&#xff1a; acl number 3000 rule 5 deny…

数组与串,串的实现,KMP,BF算法

数组是一种常用的数据结构&#xff0c;高级语言头提供了支持数组的基本操作&#xff0c;而且数组也是构成其他数据结构的重要组成。 数组是N个相同元素的构成的占用一块地址连续的内存单元的有限序列。 数组的任一个元素都可以用在数组的位置来表示。 数组与线性表区别&#xf…

结对开发——求最大值

一、题目&#xff1a; 返回一个整数数组中最大子数组的和。 要求&#xff1a; 1.输入一个整形数组&#xff0c;数组里有正数也有负数。 2.数组中连续的一个或多个整数组成一个子数组&#xff0c;每个子数组都有一个和。 3.求所有子数组的和的最大值。要求时间复杂度为O(n)。 二…

浏览器获取设备信息_一条命令获取 IE 浏览器保存网站的账号和密码信息

渗透攻击红队一个专注于红队攻击的公众号大家好&#xff0c;这里是 渗透攻击红队 的第 41 篇文章&#xff0c;本公众号会记录一些我学习红队攻击的复现笔记(由浅到深)&#xff0c;不出意外每天一更Powershell内网渗透一直以来都是一个热门话题&#xff0c;试想在一个大型的内网…

(转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性

转发&#xff1a;微软MVP 卢建晖 的文章&#xff0c;希望对大家有帮助。原文&#xff1a;http://blog.csdn.net/kinfey/article/details/44459625 编者语 &#xff1a; 昨晚写好的文章居然csdn不审核&#xff0c;这个也难怪人&#xff0c;但自己比较忙没办法。分享继续&#xf…

win10 python 调用模块_python常识系列14--gt;python通过jpype模块调用jar包

前言能坚持一件事&#xff0c;本身就是一种很了不起的才华。一、jpype模块是什么&#xff1f;能够让 python 代码方便地调用 Java 代码的工具二、jpype模块安装安装和其它模块没区别&#xff0c;但是注意模块名 是 jpype1 &#xff0c;后面有个1pip install jpype1三、jpype模块…

mysql 载入主体时出错_mysql遇到load data导入文件数据出现1290错误的解决方案

错误出现情景在cmd中使用mysql命令&#xff0c;学生信息表添加数据。使用load data方式简单批量导入数据。准备好文本数据&#xff1a; xueshengxinxi.txt 文件 数据之间以tab键进行分割执行 “load data infile 文本数据路径 into table tab_load_data” 弹出错误。#load d…

【原创】Kakfa utils源代码分析(一)

Kafka.utils&#xff0c;顾名思义&#xff0c;就是一个工具套件包&#xff0c;里面的类封装了很多常见的功能实现——说到这里&#xff0c;笔者有一个感触&#xff1a;当初为了阅读Kafka源代码而学习了Scala语言&#xff0c;本以为Kafka的实现会用到很多函数编程(Functional Pr…

redhad yum 安装mysql_redhat7通过yum安装mysql5.7.17教程

rhel/centos系列linux操作系统自身没有mysql的源&#xff0c;需要自行下载安装。本文介绍如何安装mysql5.7.x数据库。第一步&#xff1a;下载源[rootclient ~]# wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm注意&#xff1a;选择mysql57-community-…

codechef Polo the Penguin and the Tree

一般xor 的题目都是用trie解决。 那这道题是在树上的trie; 首先&#xff1a;从root1,遍历树得到1到所有节点的xor 值。 然后对于每个点我们把其插入二进制树中。 对于每一个点查找其二进值异或值最大的数 依次遍历下来。 注意&#xff1a;边的数量开两倍以上&#xff0c;RE很多…

mysql主从和dump_MySQL主从同步--原理及实现(一)

1、什么是mysql主从同步&#xff1f;当master(主)库的数据发生变化的时候&#xff0c;变化会实时的同步到slave(从)库。2、主从同步有什么好处&#xff1f;水平扩展数据库的负载能力。容错&#xff0c;高可用。Failover(失败切换)/High Availability数据备份。3、主从同步的原理…

解密多媒体封装解封装框架

上一篇文章我们搭好了环境并编译出所需的ffmpeg库&#xff0c;本篇我们讨论如何利用ffmpeg提供的API函数进行多媒体文件的解封装&#xff08;demux&#xff09;过程。在讲解之前&#xff0c;我们需要了解一些基本的多媒体文件知识&#xff0c;大虾请飘过。 容器格式&#xff1a…

bzoj 3611

和BZOJ消耗站一样&#xff0c;先将那个询问的简图构建出来&#xff0c;然后就是简单的树形DP。 &#xff08;倍增数组开小了&#xff0c;然后就狂WA&#xff0c;自己生成的极限数据深度又没有那么高&#xff0c;链又奇迹般正确&#xff09; 1 #include <cstdio>2 #includ…

vscode添加源文件_VSCode自制的IDE编译多个源文件

文/EdwardVSCode的预定义变量我们上一篇文章中讲述了如何将MinGW工具嵌入到VSCode文本编辑器中&#xff0c;在这个配置的过程中&#xff0c;我们只需要通过修改VSCode生成的“luanch.json”和“task.json”两个JSON文件中的特定字段&#xff0c;就可以实现开发环境的搭建。那么…

mysql+自动还原备份_Mysql 自动备份与恢复

自动备份MySql 5.0有三个方案&#xff1a;备份方案一&#xff1a; 通过 mysqldump命令,直接生成一个完整的 .sql 文件Step 1: 创建一个批处理(说明&#xff1a;root 是mysql默认用户名, aaaaaa 是mysql密码, bugtracker 是数据库名)------------mySql_backup.bat--------------…

Web Service 学习

1. Web services 平台的元素&#xff1a; SOAP (简易对象访问协议) UDDI (通用描述、发现及整合) WSDL (Web services 描述语言)1.1 什么是 SOAP&#xff1f; 基本的 Web services 平台是 XML HTTP。 SOAP 指简易对象访问协议 SOAP 是一种通信协议 SOAP 用于应用程序之间的通信…

mysql事务所_mysql事务

1.事务的ACID属性事务(Database Transaction) &#xff0c;是指作为单个逻辑工作单元执行的一系列操作。事务处理可以确保除非事务性单元内的所有操作都成功完成&#xff0c;否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元&…