每个正在运行的虚拟设备都提供了一个控制台,可让您查询和控制模拟设备的环境。例如,当您的应用在模拟器上运行时,您可以使用控制台来管理端口重定向、网络特性和电话事件。
以下命令要求您有正在运行的模拟器。如需详细了解如何运行模拟器,请参阅在 Android 模拟器上运行应用和从命令行启动模拟器。
启动和停止控制台会话
如需访问控制台并输入命令,请从终端窗口中使用 telnet 连接到控制台端口,并提供您的身份验证令牌。每当控制台显示 OK 时,表明它已可以开始接受命令。它没有通常那种提示符。
如需连接到正在运行的虚拟设备的控制台,请执行以下操作:
打开终端窗口并输入以下命令:
telnet localhost console-port模拟器窗口标题会列出在单独的窗口中运行时的控制台端口号,而不是在工具窗口中运行时的控制台端口号。例如,使用控制台端口 5554 的模拟器的窗口标题可以是 Pixel8_API_34:5554。此外,
adb devices命令也会输出正在运行的虚拟设备及其控制台端口号的列表。如需了解详情,请参阅查询设备。注意:模拟器会监听端口 5554 到 5585 上的连接,并且仅接受来自本地主机的连接。
控制台显示 OK 后,输入
auth auth_token命令。在您可以输入控制台命令之前,模拟器控制台会要求您进行身份验证。
auth_token必须与主目录中.emulator_console_auth_token文件的内容相符。如果该文件不存在,则
telnet localhost console-port命令会创建该文件,其中包含一个随机生成的身份验证令牌。如需停用身份验证,请从.emulator_console_auth_token文件中删除令牌,或者创建一个空文件(如果该文件不存在)。连接到控制台后,输入控制台命令。
输入
help、help command或help-verbose可查看控制台命令的列表并了解特定的命令。如要退出控制台会话,请输入
quit或exit。
以下是一个会话示例:
$ telnet localhost 5554
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: Authentication required
Android Console: type 'auth <auth_token>' to authenticate
Android Console: you can find your <auth_token> in
'/Users/me/.emulator_console_auth_token'
OK
auth 123456789ABCdefZ
Android Console: type 'help' for a list of commands
OK
help-verbose
Android console command help:
help|h|? Prints a list of commands
help-verbose Prints a list of commands with descriptions
ping Checks if the emulator is alive
automation Manages emulator automation
event Simulates hardware events
geo Geo-location commands
gsm GSM related commands
cdma CDMA related commands
crash Crashes the emulator instance
crash-on-exit Simulates crash on exit for the emulator instance
kill Terminates the emulator instance
restart Restarts the emulator instance
network Manages network settings (ethernet and cellular only)
power Power related commands
quit|exit Quits control session
redir Manages port redirections
sms SMS related commands
avd Controls virtual device execution
qemu QEMU-specific commands
sensor Manages emulator sensors
physics Manages physical model
finger Manages emulator finger print
debug Controls the emulator debug output tags
rotate Rotates the screen clockwise by 90 degrees
screenrecord Records the emulator's display
fold Folds the device
unfold Unfolds the device
multidisplay Configures the multi-display
nodraw turn on/off NoDraw mode. (experimental)
resize-display resize the display resolution to the preset size
virtualscene-image customize virtualscene image for virtulscene camera
proxy manage network proxy server settings
phonenumber set phone number for the device
try 'help <command>' for command-specific help
OK
exit
Connection closed by foreign host.
即发即弃命令
如果您不需要会话保持打开状态,请使用 adb emu 快捷键,该快捷键会执行命令并立即将控制权返回给调用 shell:
adb emu command commandParameter
使用 adb emu 进行调用会连接到可用的模拟器。如果您同时运行多个模拟器,则必须传入目标模拟器的序列号:
adb -s emulator-serial emu command commandParameter
模拟器命令参考
以下列表介绍了模拟器控制台命令及其参数和值:
常规命令
avd {stop| start| status| name}查询、控制和管理虚拟设备,具体说明如下:- stop:停止设备的执行。
- start:开始设备的执行。
- status:查询虚拟设备状态,可以是 running 或 stopped。
- name:查询虚拟设备名称。
avd snapshot {list| save name| load name| delete name}利用快照保存和恢复设备状态,具体说明如下:- list:列出所有已保存的快照。
- 保存名称:将快照另存为指定名称。
- load name:加载指定快照。
- delete name:删除指定快照。
以下示例以
firstactivitysnapshot作为名称保存快照:avd snapshot save firstactivitysnapshotfold:折叠设备以显示其较小的屏幕配置(如果设备可折叠且当前处于展开状态)。
展开:展开设备以显示其较大的屏幕配置(如果设备可折叠且当前处于折叠状态)。
kill:终止虚拟设备。
ping:检查虚拟设备是否正在运行。
旋转:以 45 度的增量逆时针旋转 AVD。
使模拟器崩溃
crash:在应用执行过程中使模拟器崩溃。
crash-on-exit:在应用退出时使模拟器崩溃。
调试标记
调试标记 …:启用或停用来自模拟器特定部分的调试消息。“tags”参数的值必须来自执行
emulator -help-debug-tags时显示的调试标记列表中。如需详细了解-help-debug-tags选项,请参阅常用选项表格。以下示例启用了 radio 标记:debug radio
端口重定向
redir list:列出当前端口重定向。
redir add protocol:host-port:guest-port添加新的端口重定向,具体说明如下:- 协议:必须是 tcp 或 udp。
- host-port:要在主机上打开的端口号。
- guest-port:要在模拟器上将数据传输到的端口号。
redir del protocol:host-port删除端口重定向。- 协议:必须是 tcp 或 udp。
- host-port:要在主机上打开的端口号。
地理位置
通过向模拟器发送 GPS 定位,设置向模拟器内运行的应用报告的地理位置。
您可以在虚拟设备运行后立即发出以下地理位置命令中的一种。模拟器通过创建模拟位置提供程序来设置您输入的位置。此提供程序响应由应用设置的位置监听器,并且会将位置提供给 LocationManager。任何应用均可通过调用 LocationManager.getLastKnownLocation("gps") 来查询位置管理器,以获取模拟设备的当前 GPS 定位。
geo fix longitude latitude [altitude] [satellites] [velocity]:向模拟器发送简单的 GPS 定位。以十进制度为单位指定经度和纬度。使用 1 到 12 之间的数字指定用于确定位置的卫星数量,并以米为单位指定海拔高度,以节为单位指定速度。
geo nmea 语句:向模拟设备发送 NMEA 0183 语句,就像是从模拟的 GPS 调制解调器发送的一样。让句子以“$GP”开头。目前仅支持“$GPGGA”和“$GPRCM”语句。以下示例是一个 GPGGA(全球定位系统定位数据)语句,它描述了 GPS 接收器接收的时间、位置和定位数据:
geo nmea $GPGGA,hhmmss.ss,llll.ll,a,yyyyy.yy,a,x,xx,x.x,x.x,M,x.x,M,x.x,xxxx
虚假硬件事件
借助模拟器控制台的硬件事件子系统,您可以模拟与设备的几乎所有物理互动。这包括实体按钮、屏幕触摸/手势、旋转拨盘、操纵杆输入和硬件开关。
事件类型:列出所有虚假事件类型。对于包含代码的事件,代码数列在右侧的圆括号中。输出示例:
event types event <type> can be an integer or one of the following aliases: EV_SYN EV_KEY (405 code aliases) EV_REL (2 code aliases) EV_ABS (27 code aliases) EV_MSC EV_SW (4 code aliases) EV_LED EV_SND EV_REP EV_FF EV_PWR EV_FF_STATUS EV_MAX OK事件发送类型 [类型 …]:发送一个或多个虚假事件类型。
事件代码类型:列出指定虚假事件类型的事件代码。
event send type[:code]:[value] […]:发送一个或多个虚假事件以及可选的代码和代码值。
EV_KEY - 键代码参考
EV_KEY 事件类型用于模拟按钮的按下和松开操作。下表将支持的众多键代码划分为逻辑类别。对于每个键代码,调度值 1 会模拟按键,而值 0 会模拟松开按键。值 2 表示按键重复。
子表 A:Android 系统键
| 代码 | 说明 |
|---|---|
KEY_HOME |
主屏幕按钮触发器 |
KEY_BACK |
返回按钮触发器 |
KEY_MENU |
菜单(溢出)按钮 |
KEY_POWER |
电源按钮(按一下/长按) |
KEY_VOLUMEUP |
音量调高按钮触发器 |
KEY_VOLUMEDOWN |
“音量调低按钮”触发器 |
KEY_CAMERA |
实体相机快门按钮 |
KEY_FOCUS |
相机自动对焦快门 |
KEY_SEARCH |
搜索按钮触发器 |
KEY_SLEEP |
睡眠指令触发器 |
KEY_WAKEUP |
唤醒指令触发器 |
KEY_NOTIFICATION |
打开通知抽屉 |
KEY_MUTE |
将系统音频输出设为静音 |
KEY_MICMUTE |
将麦克风输入静音 |
KEY_BRIGHTNESSDOWN |
调低显示屏亮度 |
KEY_BRIGHTNESSUP |
调高显示屏亮度 |
KEY_PHONE |
打开默认的拨号器应用 |
KEY_SEND |
发送或发起电话 |
KEY_HEADSETHOOK |
耳机挂钩(接听/挂断) |
KEY_SCREEN |
屏保激活命令 |
KEY_CONFIG |
配置系统菜单 |
KEY_SWITCHVIDEOMODE |
切换系统视频模式 |
KEY_KBDILLUMTOGGLE |
切换键盘背光 |
子表 B:媒体和播放控制
| 代码 | 说明 |
|---|---|
KEY_PLAYPAUSE |
切换播放和暂停状态 |
KEY_PLAY |
启动媒体播放 |
KEY_PAUSECD |
暂停播放 CD |
KEY_STOPCD |
停止播放 CD |
KEY_NEXTSONG |
跳至下一首曲目 |
KEY_PREVIOUSSONG |
跳到上一首曲目 |
KEY_REWIND |
回放当前轨道 |
KEY_FASTFORWARD |
快进活跃轨道 |
KEY_RECORD |
记录触发命令 |
KEY_SHUFFLE |
切换为随机播放 |
KEY_REPEAT |
切换循环播放模式 |
KEY_MEDIA |
媒体键触发器 |
子表 C:导航和通用键盘
| 代码 | 说明 |
|---|---|
KEY_UP |
向上方向键方向 |
KEY_DOWN |
向下方向键方向 |
KEY_LEFT |
向左方向键 |
KEY_RIGHT |
向右方向键方向 |
KEY_PAGEUP |
向上翻页导航 |
KEY_PAGEDOWN |
向下翻页导航 |
KEY_INSERT |
插入按键触发器 |
KEY_DELETE |
删除按键触发器 |
KEY_ENTER |
输入键触发器 |
KEY_ESC |
Escape 键触发器 |
KEY_TAB |
Tab 键触发器 |
KEY_SPACE |
空格键触发器 |
KEY_BACKSPACE |
退格键触发器 |
KEY_CLEAR |
清除输入缓冲区 |
KEY_CANCEL |
取消有效操作 |
KEY_OK |
确认/确定选择 |
KEY_SELECT |
选择内容触发器 |
KEY_GOTO |
前往指定地点 |
KEY_HELP |
访问帮助上下文 |
子表 D:字母数字和键盘符号
- 标准字母:
KEY_A至KEY_Z(26 个代码)。 - 数字键盘键:
KEY_1至KEY_0(10 个代码)。
| 代码 | 字符符号 |
|---|---|
KEY_COMMA |
, |
KEY_DOT |
. |
KEY_SLASH |
/ |
KEY_SEMICOLON |
; |
KEY_APOSTROPHE |
' |
KEY_GRAVE |
\` |
KEY_MINUS |
- |
KEY_EQUAL |
= |
KEY_LEFTBRACE |
[ |
KEY_RIGHTBRACE |
] |
KEY_BACKSLASH |
\ |
KEY_KPASTERISK |
*(数字键盘) |
KEY_KPPLUS |
+(数字键盘) |
KEY_KPMINUS |
-(数字键盘) |
KEY_KPDOT |
.(数字键盘) |
KEY_KPSLASH |
/(数字键盘) |
KEY_KPENTER |
Enter(数字键盘) |
KEY_KPEQUAL |
=(数字键盘) |
KEY_KPCOMMA |
,(数字键盘) |
KEY_KPJPCOMMA |
,(日语布局) |
KEY_KPLEFTPAREN |
((数字键盘) |
KEY_KPRIGHTPAREN |
)(数字键盘) |
KEY_KPPLUSMINUS |
±(数字键盘) |
子表 E:辅助键和功能键
- 标准功能键:
KEY_F1至KEY_F24(24 个代码)。
| 代码 | 说明 |
|---|---|
KEY_LEFTSHIFT |
左 Shift 键盘修饰键 |
KEY_RIGHTSHIFT |
右 Shift 键盘修饰键 |
KEY_LEFTCTRL |
左 Ctrl 键盘修饰键 |
KEY_RIGHTCTRL |
右 Ctrl 键键盘修饰键 |
KEY_LEFTALT |
左 Alt 键盘修饰键 |
KEY_RIGHTALT |
右 Alt 键盘辅助键 |
KEY_LEFTMETA |
左 Meta/Command 键 |
KEY_RIGHTMETA |
右 Meta/Command 键 |
KEY_CAPSLOCK |
Caps Lock 键盘切换开关 |
KEY_NUMLOCK |
Num Lock 键盘切换开关 |
KEY_SCROLLLOCK |
Scroll Lock 键盘切换开关 |
KEY_COMPOSE |
Compose 字符助手 |
KEY_FN |
实体键盘 FN 键 |
KEY_FN_ESC |
功能键组合 |
KEY_FN_1 |
特殊功能快捷键 1 |
KEY_FN_2 |
特殊功能快捷键 2 |
KEY_FN_D |
特殊功能快捷键 D |
KEY_FN_E |
特殊功能快捷键 E |
KEY_FN_F |
特殊功能快捷键 F |
KEY_FN_S |
特殊功能快捷键 S |
KEY_FN_B |
特殊功能快捷键 B |
子表 F:游戏手柄和操纵杆
| 代码 | 说明 |
|---|---|
BTN_A / BTN_B / BTN_C |
控制器盘面按钮 A/B/C |
BTN_X / BTN_Y / BTN_Z |
控制器正面按钮 X/Y/Z |
BTN_START |
游戏手柄“开始”菜单按钮 |
BTN_SELECT |
游戏手柄“选择”按钮 |
BTN_MODE |
控制器模式开关 |
BTN_TL/BTN_TR |
左 / 右肩部按钮 |
BTN_TL2/BTN_TR2 |
左 / 右模拟扳机 |
BTN_THUMBL/BTN_THUMBR |
按左 / 右侧摇杆 |
BTN_DPAD_UP |
游戏手柄向上方向键触发器 |
BTN_DPAD_DOWN |
游戏手柄方向键向下触发器 |
BTN_DPAD_LEFT |
游戏手柄向左方向键触发器 |
BTN_DPAD_RIGHT |
游戏手柄向右方向键触发器 |
BTN_THUMB |
操纵杆主拇指触发器 |
BTN_TOP/BTN_TOP2 |
操纵杆上方的顶部按钮 |
BTN_PINKIE |
操纵杆小指按钮触发器 |
BTN_BASE到 _BASE6 |
操纵杆平台基本按钮 |
BTN_DEAD |
非活跃的游戏手柄死区标志 |
BTN_TRIGGER |
实体操纵杆手部触发器 |
BTN_JOYSTICK |
通用操纵杆输入代码 |
子表 G:鼠标、触控和触控笔输入
| 代码 | 说明 |
|---|---|
BTN_MOUSE |
一般鼠标指针事件 |
BTN_LEFT |
点击鼠标左键 |
BTN_RIGHT |
点击鼠标右键 |
BTN_MIDDLE |
点击鼠标中键滚轮 |
BTN_SIDE |
导航侧边键触发器 |
BTN_EXTRA |
额外鼠标按键触发器 |
BTN_FORWARD |
点击浏览器前进按钮 |
BTN_BACK |
点击浏览器后退导航 |
BTN_TASK |
系统任务切换器键 |
BTN_TOUCH |
检测到屏幕物理接触 |
BTN_STYLUS |
主动式触控笔接近度 |
BTN_STYLUS2 |
触控笔上的辅助笔杆开关 |
BTN_TOOL_PEN |
触控笔工具标识符 |
BTN_TOOL_RUBBER |
触控笔橡皮擦工具标识符 |
BTN_TOOL_BRUSH |
Painter 画笔工具标识符 |
BTN_TOOL_PENCIL |
绘图铅笔工具标识符 |
BTN_TOOL_AIRBRUSH |
喷枪彩绘工具标识符 |
BTN_TOOL_FINGER |
触摸屏手指接触 |
BTN_TOOL_MOUSE |
外部鼠标工具标识符 |
BTN_TOOL_LENS |
光学放大镜工具 |
BTN_TOOL_DOUBLETAP |
手势点按两次速度标志 |
BTN_TOOL_TRIPLETAP |
手势点按三次速度标志 |
子表 H:应用快捷方式
| 代码 | 目标操作 |
|---|---|
KEY_WWW |
启动默认网络浏览器 |
KEY_MAIL |
打开默认电子邮件客户端 |
KEY_BOOKMARKS |
打开浏览器书签列表 |
KEY_CALC |
打开计算器实用工具 |
KEY_FILE |
打开本地文件资源管理器 |
KEY_EDIT |
文档编辑触发器 |
KEY_NEW |
文档创建新触发器 |
KEY_OPEN |
文档打开触发器 |
KEY_SAVE |
文件保存任务触发器 |
KEY_CLOSE |
文件关闭任务触发器 |
KEY_PRINT |
文件打印任务触发器 |
KEY_COPY |
剪贴板缓冲区复制操作 |
KEY_PASTE |
剪贴板缓冲区插入操作 |
KEY_CUT |
剪贴板缓冲区剪切操作 |
KEY_UNDO |
剪贴板缓冲区撤消操作 |
KEY_REDO |
剪贴板缓冲区重做操作 |
KEY_CANCEL |
缓冲取消流程触发器 |
KEY_FIND |
文档搜索实用程序 |
KEY_REFRESH |
文档刷新实用程序 |
KEY_EXIT |
文档关闭实用程序 |
KEY_DOCUMENTS |
发布了系统文档门户 |
KEY_HOMEPAGE |
启动首页浏览器 |
KEY_FAVORITES |
打开浏览器收藏夹门户 |
KEY_CHAT |
启动即时通讯工具 |
KEY_EMAIL |
备用邮箱启用触发器 |
KEY_FINANCE |
打开股票/金融实用程序 |
KEY_SPORT |
打开运动追踪实用程序 |
KEY_SHOP |
打开数字购物门户网站 |
KEY_PLAYER |
打开主要媒体播放器 |
KEY_MP3 |
打开主 MP3 播放器 |
KEY_TEXT |
打开默认文本编辑器 |
KEY_LIST |
打开核对清单实用程序 |
KEY_MEMO |
打开记事本 / 备忘录实用程序 |
KEY_CALENDAR |
打开日历 / 日程门户 |
KEY_DIRECTORY |
打开系统地址目录 |
KEY_COMPUTER |
打开规范探索器 |
KEY_TV/KEY_TV2 |
启动电视门户 |
KEY_RADIO |
启动无线装置实用程序 |
KEY_CD/KEY_DVD |
激活光盘驱动器读取器 |
KEY_AUDIO/KEY_VIDEO |
访问媒体规范 |
KEY_TUNER |
配置接收器/调谐器 |
KEY_SAT/KEY_SAT2 |
配置卫星 Feed |
KEY_TAPE |
播放磁带媒体播放器 |
KEY_VCR |
播放 VCR 播放器 Feed |
KEY_VCR2 |
播放 VCR 2 播放器 Feed |
KEY_AUX |
辅助媒体端口输入 |
KEY_SETUP |
设置配置菜单 |
KEY_PROG1到 _PROG4 |
用户定义的程序键 |
KEY_ZOOM |
缩放视口切换开关 |
KEY_MODE |
视口模式选择 |
KEY_KEYBOARD |
显示/隐藏虚拟键盘 |
KEY_LANGUAGE |
切换音轨语言 |
KEY_TITLE |
打开媒体标题选项 |
KEY_SUBTITLE |
切换字幕界面 |
KEY_ANGLE |
更改视频拍摄角度 |
KEY_EPG |
打开电子收视指南 |
KEY_PVR |
打开个人视频录制器 |
KEY_MHP |
开放式多媒体家庭平台 |
KEY_CHANNEL |
打开电视调谐器频道 |
KEY_CHANNELUP |
向上调电视频道 |
KEY_CHANNELDOWN |
向下调电视频道 |
KEY_RED |
红色互动按钮 |
KEY_GREEN |
绿色互动按钮 |
KEY_YELLOW |
黄色互动按钮 |
KEY_BLUE |
蓝色互动按钮 |
KEY_FIRST |
选择第一个商品选项 |
KEY_LAST |
选择最后一项推荐项 |
KEY_NEXT |
选择下一个轨道选项 |
KEY_PREVIOUS |
选择上一个轨道选项 |
KEY_RESTART |
重新开始媒体轨道循环 |
KEY_SLOW |
慢动作播放选项 |
KEY_AB |
A-B 重复序列循环 |
KEY_PLAYCD |
CD 卡座播放命令 |
KEY_PAUSECD |
CD 播放器暂停命令 |
KEY_STOPCD |
CD 播放器停止命令 |
KEY_DIGITS |
数字键盘输入命令 |
KEY_TEEN |
键盘青少年值选项 |
KEY_TWEN |
小键盘 twen 值选项 |
KEY_DEL_EOL |
删除到行缓冲区末尾 |
KEY_DEL_EOS |
删除到屏幕缓冲区的末尾 |
KEY_INS_LINE |
插入新行缓冲区 |
KEY_BRL_DOT1到 _DOT8 |
盲文显示屏按钮输入 |
KEY_VOICECOMMAND |
启动语音助理应用 |
KEY_SELECTIVE_SCREEN |
触发区域屏幕截图 |
KEY_BATTERY |
查询电池通知 |
KEY_STAR/KEY_SHARP |
电话键盘符号 |
KEY_PLUS |
电话键盘加号 |
KEY_INFO |
显示信息面板叠加层 |
KEY_TIME |
显示当前时钟时间 |
KEY_VENDOR |
查询供应商规范 |
KEY_ARCHIVE |
打开本地归档实用程序 |
KEY_PROGRAM |
配置程序参数 |
KEY_POWER2 |
触发备用电源 |
EV_ABS - 绝对运动事件
EV_ABS 事件类型对于模拟精确的触摸、拖放手势、多点触控捏合操作和操纵杆调整至关重要。下表中的绝对坐标直接对应于底层物理屏幕分辨率。
| 代码 | 坐标范围 | 说明 |
|---|---|---|
ABS_MT_TRACKING_ID |
-1 或 ≥0 |
跟踪 ID;-1 结束触控 |
ABS_MT_POSITION_X |
0到 1767 |
X 坐标 (Pixel Fold) |
ABS_MT_POSITION_Y |
0到 2207 |
Y 坐标 (Pixel Fold) |
ABS_MT_TOUCH_MAJOR |
像素 | 触摸区域主轴宽度 |
ABS_MT_TOUCH_MINOR |
像素 | 触摸区域短轴宽度 |
ABS_MT_WIDTH_MAJOR |
像素 | 工具主轴宽度 |
ABS_MT_WIDTH_MINOR |
像素 | 工具短轴宽度 |
ABS_MT_ORIENTATION |
0到 255 |
接触方向角度 |
ABS_MT_PRESSURE |
0到 255 |
接触力大小 |
ABS_MT_DISTANCE |
mm | 悬停距离(与屏幕的距离) |
ABS_MT_TOOL_TYPE |
0到 2 |
0=手指,1=触控笔,2=铅笔 |
ABS_MT_BLOB_ID |
整数 | 联系人 blob 标识符 |
ABS_MT_TOOL_X |
像素 | 工具 X 位置坐标 |
ABS_MT_TOOL_Y |
像素 | 工具 Y 轴位置坐标 |
ABS_MT_SLOT |
0到 N |
有效卡槽(协议 B) |
ABS_X / _Y / _Z |
模拟 | 操纵杆坐标轴 |
ABS_RX / _RY / _RZ |
模拟 | 操纵杆旋转轴 |
ABS_THROTTLE/_BRAKE |
模拟 | 踏板和转向控制装置 |
ABS_HAT0X/_HAT0Y |
-1 / 0 / 1 |
方向键帽和 POV 开关 |
ABS_PRESSURE |
0到 255 |
触控笔 / 指针力度级别 |
ABS_DISTANCE |
mm | 悬停距离(触控笔) |
ABS_TILT_X/_TILT_Y |
度 | 触控笔倾斜角度 |
ABS_VOLUME |
模拟 | 控制器的音量 |
Android 触控交互由多点触控 (MT) 协议驱动。现代模拟器同时实现了协议 A(无状态,发送以同步标记分隔的接触数据包)和协议 B(有状态,将接触分配给专用跟踪槽)。协议 B 可高效跟踪多个并发触控,以实现缩放等手势。
EV_REL 和 EV_SW - 运动和硬件开关
EV_REL 事件类别用于管理相对指针或坐标变化,主要用于模拟外部鼠标移动或滚轮滚动。EV_SW 事件类别用于管理实体设备开关,例如竖折屏手机或平板电脑是否折叠,或者是否插入了外部音频硬件。
| 代码 | 值 | 说明 |
|---|---|---|
REL_X |
增量 | 横向光标移动 |
REL_Y |
增量 | 垂直光标移动 |
SW_LID |
0/1 |
笔记本电脑的开合状态(0=打开,1=关闭) |
SW_TABLET_MODE |
0/1 |
平板电脑模式状态(0=关闭,1=开启) |
SW_HEADPHONE_INSERT |
0/1 |
耳机插孔状态(0=已拔出,1=已插入) |
SW_MICROPHONE_INSERT |
0/1 |
麦克风插孔状态(0=已拔出,1=已插入) |
命令调度语法
如需调度这些代码,请使用英文冒号分隔类型、代码和值,设置控制台命令的格式。您可以在一个字符串中将多个坐标更改排入队列。至关重要的是,始终附加最终同步标记 (EV_SYN:0:0),以指示模拟器框架应将这些输入捆绑在一起并进行处理。
事件脚本和手势示例
由于 Telnet 允许发送多部分参数,因此您可以模拟真实的身体手势序列。以下是用于自动执行主机控制台手势的原始事件脚本结构。
模拟屏幕点按
如需在目标坐标处执行干净的屏幕点按操作,请分配跟踪 ID,指定屏幕上的 X 和 Y 坐标,模拟接触触摸,进行同步,然后释放。
# Press down at coordinate (400, 800) and sync
event send EV_ABS:ABS_MT_TRACKING_ID:1
OK
event send EV_ABS:ABS_MT_POSITION_X:400
OK
event send EV_ABS:ABS_MT_POSITION_Y:800
OK
event send EV_KEY:BTN_TOUCH:1
OK
event send EV_SYN:0:0
OK
# Lift finger up and sync
event send EV_ABS:ABS_MT_TRACKING_ID:-1
OK
event send EV_KEY:BTN_TOUCH:0
OK
event send EV_SYN:0:0
OK
模拟垂直滚动(滑动)
如需执行滚动滑动手势,请按住起始坐标处的接触点,发送中间移动坐标帧,然后在结束时释放。
# Finger touch down at start coordinate (500, 1600)
event send EV_ABS:ABS_MT_TRACKING_ID:2
OK
event send EV_ABS:ABS_MT_POSITION_X:500
OK
event send EV_ABS:ABS_MT_POSITION_Y:1600
OK
event send EV_KEY:BTN_TOUCH:1
OK
event send EV_SYN:0:0
OK
# Move coordinates upward dynamically
event send EV_ABS:ABS_MT_POSITION_Y:1200
OK
event send EV_SYN:0:0
OK
event send EV_ABS:ABS_MT_POSITION_Y:800
OK
event send EV_SYN:0:0
OK
event send EV_ABS:ABS_MT_POSITION_Y:400
OK
event send EV_SYN:0:0
OK
# Finger release at coordinate (500, 400)
event send EV_ABS:ABS_MT_TRACKING_ID:-1
OK
event send EV_KEY:BTN_TOUCH:0
OK
event send EV_SYN:0:0
OK
模拟双指张合缩放手势
如需触发双指缩放,请使用有效的 MT slot(0 和 1)来跟踪和协调两个同时远离的触控坐标。
# Finger 1 down at (500, 1000) using slot 0
event send EV_ABS:ABS_MT_SLOT:0
OK
event send EV_ABS:ABS_MT_TRACKING_ID:10
OK
event send EV_ABS:ABS_MT_POSITION_X:500
OK
event send EV_ABS:ABS_MT_POSITION_Y:1000
OK
event send EV_KEY:BTN_TOUCH:1
OK
event send EV_SYN:0:0
OK
# Finger 2 down at (600, 1000) using slot 1
event send EV_ABS:ABS_MT_SLOT:1
OK
event send EV_ABS:ABS_MT_TRACKING_ID:11
OK
event send EV_ABS:ABS_MT_POSITION_X:600
OK
event send EV_ABS:ABS_MT_POSITION_Y:1000
OK
event send EV_SYN:0:0
OK
# Fingers slide apart from each other
event send EV_ABS:ABS_MT_SLOT:0
OK
event send EV_ABS:ABS_MT_POSITION_X:300
OK
event send EV_SYN:0:0
OK
event send EV_ABS:ABS_MT_SLOT:1
OK
event send EV_ABS:ABS_MT_POSITION_X:800
OK
event send EV_SYN:0:0
OK
# Lift Finger 1 using slot 0
event send EV_ABS:ABS_MT_SLOT:0
OK
event send EV_ABS:ABS_MT_TRACKING_ID:-1
OK
event send EV_SYN:0:0
OK
# Lift Finger 2 using slot 1
event send EV_ABS:ABS_MT_SLOT:1
OK
event send EV_ABS:ABS_MT_TRACKING_ID:-1
OK
event send EV_KEY:BTN_TOUCH:0
OK
event send EV_SYN:0:0
OK
模拟耳机连接切换
模拟耳机插孔插入或移除,以测试音频路由开关。值 1 表示耳机插孔插入,0 表示耳机移除。
# Simulate headphones plugged in
event send EV_SW:SW_HEADPHONE_INSERT:1 EV_SYN:0:0
OK
# Simulate headphones unplugged
event send EV_SW:SW_HEADPHONE_INSERT:0 EV_SYN:0:0
OK
从真实设备中发现控制台事件代码
如需了解任何自定义操作或按钮手势的确切事件语法序列,请通过 adb shell 进行连接,然后运行 getevent 诊断实用程序。当您与模拟器 GUI 互动时,控制台会打印确切的事件代码、类型和位置。
# Run getevent to monitor input events dynamically
adb shell getevent -lt
/dev/input/event12: EV_KEY KEY_POWER DOWN
/dev/input/event12: EV_SYN SYN_REPORT 00000000
/dev/input/event12: EV_KEY KEY_POWER UP
/dev/input/event12: EV_SYN SYN_REPORT 00000000
- 事件文本消息:发送用于模拟按键的字符串。 该消息必须是 UTF-8 字符串。Unicode 消息会根据当前设备键盘进行反向映射,不受支持的字符会被静默舍弃。
电源状态控件
电源显示:显示电池和充电器状态。
power ac {on| off}:将交流电充电状态设为开启或关闭。
电源状态 {unknown| charging| discharging| not-charging| full}:按照指定方式更改电池状态。
power present {true| false}:设置电池存在状态。
电源健康状况 {unknown| good| overheat| dead| overvoltage| failure}:设置电池健康状况。
电池容量百分比:将电池剩余电量状态设为 0 到 100 之间的百分比。
网络连接状态(仅限以太网和移动网络)
网络状态:检查网络状态以及当前的延迟和速度特性。
network delay latency更改模拟网络延迟。您可以使用模拟器来模拟各种网络延迟级别,以便您可以在更接近于实际运行条件的环境中测试您的应用。您可以在模拟器启动时设置延迟级别或范围,也可以在应用在模拟器中运行时使用控制台来更改延迟。
网络延迟的格式可以是以下几种格式之一(数字以毫秒为单位):
网络延迟格式:
gprs:GPRS,使用的延迟范围为 150(最小值)到 550(最大值)。
edge:EDGE/EGPRS,使用的延迟范围为 80(最小值)到 400(最大值)。
umts:UMTS/3G,使用的延迟范围为 35(最小值)到 200(最大值)。
none:没有延迟。
num:模拟指定的延迟时间(以毫秒为单位)。
min:max:模拟指定的延迟范围。
如需在模拟器启动时设置延迟,请使用
-netdelay模拟器选项,并指定一个受支持的延迟值。示例:emulator -netdelay gprs emulator -netdelay 40,100如需在模拟器运行时对网络延迟进行更改,请连接到控制台,然后使用
network delay命令:network delay gprs network delay 40 100network speed speed您可以使用模拟器来模拟各种网络传输速率。您可以在模拟器启动时设置传输速率或范围,也可以在应用在模拟器中运行时使用控制台来更改速率。网络速度的格式可以是以下几种格式之一(数字以“千比特/秒”为单位):
网络速度格式:
gsm:GSM/CSD,使用的上传速度为 14.4,下载速度为 14.4。
hscsd:HSCSD,使用的上传速度为 14.4,下载速度为 43.2。
gprs:GPRS,使用的上传速度为 40.0,下载速度为 80.0。
edge:EDGE/EGPRS,使用的上传速度为 118.4,下载速度为 236.8。
umts:UMTS/3G,使用的上传速度为 128.0,下载速度为 1920。
hsdpa:HSDPA,使用的上传速度为 348.0,下载速度为 14,400.0。
lte:LTE,使用的上传速度为 58,000,下载速度为 173,000。
evdo:EVDO,使用的上传速度为 75,000,下载速度为 280,000。
full:速度不受限制,但取决于计算机的连接速度。
num:设置用于上传和下载的精确速率(以“千比特/秒”为单位)。
up:down:分别设置用于上传和下载的精确速率(以“千比特/秒”为单位)。
如需在模拟器启动时设置网络速度,请使用
-netspeed模拟器选项。示例:emulator -netspeed gsm @Pixel_API_26 emulator -netspeed 14.4,80 @Pixel_API_26如需在模拟器运行时对网络速度进行更改,请连接到控制台,然后使用
network speed命令:network speed 14.4 80network capture {start| stop} file将数据包发送到文件。以下列表介绍了参数和参数值:注意:从 Android 模拟器 36.5 及更高版本开始,Wi-Fi 连接流量默认由 netsim 处理。网络捕获控制台命令仅捕获通过 QEMU slirp 堆栈路由的旧版移动网络/WAN 流量。如需在现代模拟器版本中捕获 Wi-Fi、蓝牙或高级网络数据包,请参阅高级模拟器联网指南中的捕获网络流量。
start file:开始捕获网络数据包。出于安全考虑,文件必须是裸文件名(不包含
/等路径分隔符,也不包含..)。数据包捕获文件将保存在 AVD 的内容目录下的console_out/文件夹中(例如~/.android/avd/avd_name.avd/console_out/file)。stop file:停止向指定的文件发送数据包。
电话模拟
Android 模拟器包含自己的 GSM 和 CDMA 模拟调制解调器,可让您在模拟器中模拟电话功能。例如,借助 GSM,您可以模拟呼入电话并建立和终止数据连接。借助 CDMA,您可以提供订阅来源和首选漫游列表。Android 系统处理模拟通话的方式与处理实际通话完全相同。模拟器不支持通话音频。
gsm {call| accept| cancel| busy} phonenumbergsm 参数如下:- call:模拟来自 phonenumber 的呼入电话。
- accept:接受来自电话号码的呼入电话,并将通话状态更改为“有效”。只有在当前状态为等待或保持时,才能将通话状态更改为有效。
- cancel:终止来自或拨向 phonenumber 的呼入电话或外拨电话。
- busy:关闭对 phonenumber 的外拨电话,并将通话状态更改为忙碌。只有在当前通话状态为等待时,才能将通话状态更改为忙碌。
gsm {data| voice} state数据状态命令用于更改 GPRS 数据连接的状态,语音状态命令用于更改 GPRS 语音连接的状态,具体说明如下:- unregistered:没有可用的网络。
- home:在本地网络上,非漫游。
- roaming:在漫游网络上。
- searching:正在搜索网络。
- denied:只能拨打紧急呼救电话。
- off:与 unregistered 相同。
- on:与 home 相同。
gsm hold:将通话状态更改为“保持”。只有在当前通话状态为“active”或“waiting”时,才能将通话状态更改为“hold”。
gsm list:列出所有呼入电话和外拨电话及其通话状态。
gsm 状态:报告当前的 GSM 语音/数据连接状态。相关的值就是前述语音和数据命令的值。
gsm signal {rssi| ber}在下次 15 秒的更新时更改报告的信号强度 (rssi) 和误码率 (ber)。以下列表介绍了参数及其值:- rssi:范围为 0 到 31,99 表示未知。
- ber:范围为 0 到 7,99 表示未知。
gsm signal-profile num:设置信号强度配置文件。num 是 0 到 4 之间的数字。
cdma ssource source设置当前的 CDMA 订阅来源,其中 source 是基于网络的许可名单,其中包含 CDMA 运营商的用户及其值,具体说明如下:- nv:从非易失性 RAM 读取订阅内容。
- ruim:从移动用户身份识别模块 (RUIM) 读取订阅内容。
cdma prl_version version:转储当前的首选漫游列表 (PRL) 版本。版本号是指 PRL 数据库的版本号,该数据库中包含在系统选择和获取过程中使用的信息。
在模拟器上管理传感器
这些命令与 AVD 中可用的传感器有关。除了使用传感器命令之外,您还可以在模拟器的“虚拟传感器”屏幕上的“加速度计”和“其他传感器”标签页中查看和调整相关设置。
传感器状态:列出所有传感器及其状态。
sensor get sensor-name:获取 sensor-name 的设置。以下示例会获取加速度传感器的值:
sensor get acceleration acceleration = 2.23517e-07:9.77631:0.812348以英文冒号(:) 分隔的加速度值是指虚拟传感器的 x、y 和 z 坐标。
sensor set sensor-name value-x:value-y:value-z:设置 sensor-name 的值。以下示例将加速度传感器设为以英文冒号分隔的 x、y 和 z 值。
sensor set acceleration 2.23517e-07:9.77631:0.812348
短信模拟
sms send sender-phone-number textmessage生成收到的模拟短信。以下列表介绍了参数及其值:- sender-phone-number:包含任意数字字符串。
- textmessage:短信。
以下示例向电话号码 4085555555 发送了一条内容为“hi there”的短信:
sms send 4085555555 hi there
控制台将短信转发给 Android 框架,Android 框架继而将其传递给模拟器上用来处理短信的应用,例如“信息”应用。如果您传递 10 个数字,应用会将其格式设为电话号码。更长或更短的数字字符串将按其发送方式显示。
指纹模拟
finger touch fingerprint-id:模拟手指触摸传感器。
finger remove:模拟手指移开。
如需查看有关如何使用这些命令的说明,请参阅下面有关指纹模拟和验证的部分。
屏幕录制
借助屏幕录制命令,可以直接从主机系统捕获模拟器实体显示屏的高质量视频文件。这对于持续集成流水线和自动 bug 报告非常有用。
screenrecord {start| stop} file开始或停止显示屏录制流程。- 开始文件:开始录制视频。输出文件必须以强制性
.webm扩展名结尾。捕获的视频直接保存在 AVD 的控制台输出目录下:~/.android/avd/avd_name.avd/console_out/file。 - 停止文件:停止正在进行的显示屏录制进程。
- 开始文件:开始录制视频。输出文件必须以强制性
自动化和宏
自动化子系统允许开发者在正在运行的虚拟设备上记录宏状态转换,并回放这些转换以执行自动化测试流程。
automation {record| stop-record| play| stop-play}管理自动宏录制。- record:开始记录设备状态变化和输入。
- stop-record:停止当前宏录制会话。
- play:开始播放录制的宏序列。
- stop-play:停止当前正在播放的宏序列。
物理(6 自由度)
物理命令用于管理六自由度 (6DoF) 物理运动模型的标准答案空间姿势的日志记录,这些模型用于模拟高级动作追踪。
physics {record-gt| stop}管理身体姿势模型记录。- record-gt:开始记录地面实况 6DoF 运动数据。
- stop:停止当前实况记录进程。
高级设备控制功能
此部分汇总了用于高级模拟配置的高度专业化的控制台命令端点,包括网络代理、多显示屏配置、渲染替换和虚拟机监控程序直接调试。
multidisplay {add| del}添加或删除辅助虚拟显示器,以测试多屏幕配置。注意:Pixel Fold 或可调整大小的模拟器等折叠配置不支持辅助显示器。proxy {set| clear}通过控制台以编程方式配置网络代理转发。- 设置主机端口:配置目标代理设置。
- clear:将代理配置重置为默认值。 注意:代理设置操作在无头执行环境中会失败。
virtualscene-image {wall| table} image_path使用自定义用户图片文件自定义虚拟场景摄像头画面中显示的背景墙或水平桌面。resize-display scale在预设的缩放比例之间动态调整屏幕分辨率。注意:无头配置不支持分辨率调整。nodraw {on| off}在大量后台无头自动化运行期间,停用主机屏幕上的物理 GUI 渲染,以减少系统内存和 GPU 负载。grpc port配置通过自定义 gRPC 端口端点实现的高级程序化设备控制。qemu monitor提供对底层虚拟机监控程序控制台的直接交互式终端访问权限。只能通过有效的 Telnet 控制台会话输入此命令。icebox track pid当指定应用进程遇到未处理的异常或崩溃时,启用自动系统快照。phonenumber number设置目标设备的虚拟本地电话号码。
gRPC 编程接口
新版模拟器支持强大的 gRPC 程序化接口以及旧版 Telnet 控制台。虽然 Telnet 控制台非常适合快速交互式会话或简单脚本,但 gRPC 接口专为在持续集成 (CI) 和无头环境中实现高性能、安全且可靠的自动化控制而设计。通过提供直接服务端点,gRPC 无需解析文本流、管理终端会话握手或公开未加密的 localhost 端口。
为了帮助您在旧版 Telnet 控制台和新版 gRPC 程序化接口之间做出选择,请查看以下性能、安全性和功能比较:
| 功能 | Telnet 控制台 | gRPC 接口 |
|---|---|---|
| 适用场景 | 手动调试、交互式会话。 | 无头 CI/CD、重型自动化测试平台。 |
| 速度 | 较慢;文本开销、连接延迟。 | 经过优化;多路复用 HTTP/2,快速 proto。 |
| 安全性 | 未加密;本地端口 (5554–5585)。 | 可使用 TLS 保护,通过网络运行。 |
| 直播 | 不支持;仅限请求-响应。 | 用于 logcat、guest 音频捕获的流。 |
| 媒体 | 将输出文件写入宿主/访客磁盘。 | 直接通过有线方式传输的二进制缓冲区。 |
| 客户机操作系统 | 仅限于固定的模拟器命令。 | 运行原生 guest bash shell 命令。 |
启动和调用 gRPC
如需使用 gRPC 端点,请从命令行启动 Android 模拟器并添加 -grpc 标志,指定目标环回端口。
# Start the emulator with the gRPC service enabled on port 8556
emulator -grpc localhost:8556 @Pixel_Fold
在启用 gRPC 服务的情况下运行模拟器后,您就可以进行程序化 RPC 调用了。对于命令行测试,请使用 grpcurl 实用程序与模拟器的服务进行通信。所有请求均采用 JSON 格式,并通过明文发送。
# Query the status of the virtual device using grpcurl
grpcurl -plaintext -d '{}' localhost:8556 \
android.emulation.control.EmulatorController/getStatus
# Simulate an incoming phone call
grpcurl -plaintext -d '{"operation": "InitCall", "number": "1234567890"}' localhost:8556 \
android.emulation.control.EmulatorController/sendPhone
# Simulate typing text into the guest OS
grpcurl -plaintext -d '{"text": "Hello"}' localhost:8556 \
android.emulation.control.EmulatorController/sendKey
Telnet 控制台到 gRPC 服务的映射
下表将旧版 Telnet 控制台命令映射到相应的 gRPC 服务和方法,并说明如何以编程方式自动执行常见的虚拟设备互动:
| 类别 | 旧版 Telnet 命令 | gRPC 服务 / 方法 |
|---|---|---|
| 状态 | ping |
EmulatorController/getStatus |
| 状态 | avd name |
incubating.AvdService/getAvdInfo |
| 状态 | kill |
EmulatorController/setVmState |
| 状态 | restart |
EmulatorController/setVmState |
| 电源 | power display |
EmulatorController/getBattery |
| 电源 | power capacity |
EmulatorController/setBattery |
| 地理位置 | geo fix |
EmulatorController/setGps |
| 传感器 | sensor set |
incubating.SensorService/setSensor |
| 生物识别 | finger touch |
EmulatorController/sendFingerprint |
| 姿势 | posture |
EmulatorController/setPosture |
| 姿势 | physics/fold |
EmulatorController/setPhysicalModel |
| 短信 | sms send |
EmulatorController/sendSms |
| GSM 通话 | gsm call |
EmulatorController/sendPhone |
| GSM 通话 | phonenumber |
EmulatorController/setPhoneNumber |
| 重定向 | redir add |
Waterfall/ForwardPort |
| 输入 | event send EV_KEY |
EmulatorController/sendKey |
| 输入 | event send EV_ABS |
EmulatorController/sendTouch |
| 媒体 | screenrecord |
incubating.ScreenRecording |
| 渲染 | nodraw |
EmulatorController/setDisplayMode |
| 快照 | avd snapshot list |
SnapshotService/ListSnapshots |
| 快照 | avd snapshot load/save |
SnapshotService/LoadSnapshot |
特定于 gRPC 的程序化命令
gRPC 接口提供了多项先进功能,这些功能在旧版 Telnet 控制台连接上是无法实现的。这些功能包括直接 logcat 流式传输、双向音频捕获或注入、主机 GUI 修改和直接 shell 访问。
| gRPC 服务 / 方法 | 参数 | 能力 |
|---|---|---|
streamLogcat |
{"maxLines": 100} |
流式传输 guest 系统 logcat 输出 |
streamAudio |
{} |
通过有线方式传输扬声器音频 |
injectAudio |
{"audio": "..."} |
注入麦克风音频流 |
UiController |
{"theme": "DARK"} |
修改宿主窗口主题 |
Waterfall/Exec |
{"cmd": "ls"} |
运行原生客机操作系统 shell 命令 |
指纹模拟和验证
您可以使用 finger 命令来模拟和验证应用的指纹身份验证。您需要使用 SDK 工具 24.3 或更高版本,以及 Android 6.0(API 级别 23)或更高版本。
如需模拟和验证指纹身份验证,请按以下步骤操作:
如果您还没有指纹 ID,应在模拟器中注册一个新指纹,方法是依次选择设置 > 安全 > 指纹,并按照注册说明进行操作。
设置您的应用以接受指纹身份验证。 执行此设置后,您的设备将显示指纹身份验证屏幕。
在您的应用显示指纹身份验证屏幕后,转到控制台并输入
finger touch命令以及您创建的指纹 ID。这样就可以模拟手指触摸。然后,输入
finger remove命令以模拟手指移开。您的应用应该像用户触摸了指纹传感器而后又从上面移开一样进行响应。