Android自动化 -- sendevent/getevent 用法
getevent&sendevent 是android系统下的一个工具,可以 模拟 多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件。
这两个命令的源码在system/core/toolbox/下,sendevent.c getevent.c
关于event设备的获取,在 /proc/bus/input/devices 下面:
$ adb shell cat /proc/bus/input/devices
=========================
一、getevent
获取getevent 的使用方法 : getevent -h
getevent 监控当前的事件, 鼠标事件, 按键事件, 拖动滑动 以及其他类型的event事件;
使用getevent 获得/dev/input/eventX设备 汇报的事件,这个命令会输出所有event设备的 基本信息,如下:
shell@pc7625:/ $ getevent
add device 1: /dev/input/event6
  name:     "accel"
add device 2: /dev/input/event5
  name:     "goodix_ts"
add device 3: /dev/input/event0
  name:     "Power Button"
add device 4: /dev/input/event1
  name:     "Video Bus"
add device 5: /dev/input/event4
  name:     "baytrailaudio Intel MID Audio Jack"
add device 6: /dev/input/event2
  name:     "gpio-lesskey"
add device 7: /dev/input/event3
  name:     "dollar_cove_power_button"
表明系统有 7个event设备 ;
--------------------------------------------------------------------------------
在我的android设备里,event2 代表 音量加减按键;
shell@pc7625:/ $ getevent /dev/input/event2 &
点击 音量减按键 :
按键 按下的log :
0001 0072 00000001
0000 0000 00000000
按键 弹起的log :
0001 0072 00000000
0000 0000 00000000
其中/dev/input/event2 是device的名字 ;
0001 是type;
0072 是键码;
最后一个根据type不同而不同;
比如上面的 00000001 就是按下 音量键的keydown,00000000 是松开 音量键的keyup;
具体的type,code,value的定义 可以在源码/frameworks/base/core/java/android/view/KeyEvent.java中找到;
=============================
二、sendevent:
命令格式 : sendevent [device] [type] [code] [value]
需要注意的是在 getevent 中code显示的是十六进制, 而sendevent 中需要用 十进制
1、模拟发送一个 音量加键:
按下 正真的 音量加 按键:
/dev/input/event3: 0001 0073 00000001
/dev/input/event3: 0000 0000 00000000
松开 正真的 音量加 按键:
/dev/input/event3: 0001 0073 00000000
/dev/input/event3: 0000 0000 00000000
------------- 模拟 按键 ------------
发送 按下 音量加 :
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 1
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0
发送 松开 音量加 :
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 1 115 0
shell@anzhen4_mrd7:/ # sendevent /dev/input/event3 0 0 0
-----------------------------------------------------------------------------------
type, code, value的定义可参看kernel/include/linux/input.h
type如下定义:
- /*
- * Event types
- */
- #define EV_SYN 0x00
- #define EV_KEY 0x01
- #define EV_REL 0x02
- #define EV_ABS 0x03
- #define EV_MSC 0x04
- #define EV_SW 0x05
- #define EV_LED 0x11
- #define EV_SND 0x12
- #define EV_REP 0x14
- #define EV_FF 0x15
- #define EV_PWR 0x16
- #define EV_FF_STATUS 0x17
- #define EV_MAX 0x1f
- #define EV_CNT (EV_MAX+1)
一般来说,常用的是EV_KEY, EV_REL, EV_ABS, EV_SYN
分别对应keyboard, 相对坐标, 绝对坐标, 同步事件
EV_SYN则表示一组完整事件已经完成,需要处理,EV_SYN的code定义事件分发的类型
EV_SYN对应的code如下:
- /*
- * Synchronization events.
- */
- #define SYN_REPORT 0
- #define SYN_CONFIG 1
- #define SYN_MT_REPORT 2
EV_KEY的code比较多,这里就不列出来了,可参照input.h
EV_REL对应的code:
- /*
- * Relative axes
- */
- #define REL_X 0x00
- #define REL_Y 0x01
- #define REL_Z 0x02
- #define REL_RX 0x03
- #define REL_RY 0x04
- #define REL_RZ 0x05
- #define REL_HWHEEL 0x06
- #define REL_DIAL 0x07
- #define REL_WHEEL 0x08
- #define REL_MISC 0x09
- #define REL_MAX 0x0f
- #define REL_CNT (REL_MAX+1)
EV_ABS对应的code:
- /*
- * Absolute axes
- */
- #define ABS_X 0x00
- #define ABS_Y 0x01
- #define ABS_Z 0x02
- #define ABS_RX 0x03
- #define ABS_RY 0x04
- #define ABS_RZ 0x05
- #define ABS_THROTTLE 0x06
- #define ABS_RUDDER 0x07
- #define ABS_WHEEL 0x08
- #define ABS_GAS 0x09
- #define ABS_BRAKE 0x0a
- #define ABS_HAT0X 0x10
- #define ABS_HAT0Y 0x11
- #define ABS_HAT1X 0x12
- #define ABS_HAT1Y 0x13
- #define ABS_HAT2X 0x14
- #define ABS_HAT2Y 0x15
- #define ABS_HAT3X 0x16
- #define ABS_HAT3Y 0x17
- #define ABS_PRESSURE 0x18
- #define ABS_DISTANCE 0x19
- #define ABS_TILT_X 0x1a
- #define ABS_TILT_Y 0x1b
- #define ABS_TOOL_WIDTH 0x1c
- #define ABS_VOLUME 0x20
- #define ABS_MISC 0x28
- ###
- #define ABS_MT_TOUCH_MAJOR 0x30 /* Major axis of touching ellipse */
- #define ABS_MT_TOUCH_MINOR 0x31 /* Minor axis (omit if circular) */
- #define ABS_MT_WIDTH_MAJOR 0x32 /* Major axis of approaching ellipse */
- #define ABS_MT_WIDTH_MINOR 0x33 /* Minor axis (omit if circular) */
- #define ABS_MT_ORIENTATION 0x34 /* Ellipse orientation */
- #define ABS_MT_POSITION_X 0x35 /* Center X ellipse position */
- #define ABS_MT_POSITION_Y 0x36 /* Center Y ellipse position */
- #define ABS_MT_TOOL_TYPE 0x37 /* Type of touching device */
- #define ABS_MT_BLOB_ID 0x38 /* Group a set of packets as a blob */
- #define ABS_MT_TRACKING_ID 0x39 /* Unique ID of initiated contact */
- #define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
- ###
- #define ABS_MAX 0x3f
- #define ABS_CNT (ABS_MAX+1)
=====================================================================================
三、input keyevent
如果想模拟按键,send event用起来比较繁琐,可以用input keyevent代替
下面是input keyevent几个比较常用的用法:
input keyevent 3 // Home
input keyevent 4 // Back
input keyevent 19 //Up
input keyevent 20 //Down
input keyevent 21 //Left
input keyevent 22 //Right
input keyevent 23 //Select/Ok
input keyevent 24 //Volume+
input keyevent 25 // Volume-
input keyevent 82 // Menu 菜单
更多的按键事件keycode可参考:http://www.cnblogs.com/mgzc-1508873480/p/7826967.html
用senevent 模拟触屏事件
sendevent /dev/input/event1 0003 0000 0000015e // ABS x 坐标
sendevent /dev/input/event1: 0003 0001 000000df // ABS y 坐标
sendevent /dev/input/event1: 0001 014a 00000001 // BTN touch事件 值为1
sendevent /dev/input/event1: 0003 0018 00000000 // ABS pressure事件
sendevent /dev/input/event1: 0001 014a 00000000 // BTN touch事件 值为0
sendevent /dev/input/event1: 0000 0000 00000000 // sync事件
Android自动化 -- sendevent/getevent 用法的更多相关文章
- Android sendevent/getevent 用法
		前言:最近在弄一个模拟用户点击屏幕的功能,并且不需要用户点击屏幕,后台自动给输入框赋值,类似pc端按键精灵的功能,在网上找了很多人的资料,写的都不是太详细,一知半解.还要自己慢慢研究.于是我这边写一篇 ... 
- Android自动化压力测试图解教程——Monkey工具
		[置顶] Android自动化压力测试图解教程--Monkey工具 标签: 测试androidprofiling工具测试工具文档 2012-04-01 10:16 38185人阅读 评论(10) 收藏 ... 
- android的logcat详细用法
		Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命 令来查看和使用. 使用logcat命令 你可以用 logc ... 
- Android自动化学习笔记:编写MonkeyRunner脚本的几种方式
		---------------------------------------------------------------------------------------------------- ... 
- Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例
		---------------------------------------------------------------------------------------------------- ... 
- Android自动化测试之Monkeyrunner学习笔记(一)
		Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ... 
- 怎么通过activity里面的一个按钮跳转到另一个fragment(android FragmentTransaction.replace的用法介绍)
		即:android FragmentTransaction.replace的用法介绍 Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,他们之间最 ... 
- Android开发中Bundle用法包裹数据(转)
		Android开发中Bundle用法包裹数据 Bundle的经典用法,包裹数据放入Intent中,目的在于传输数据. SDK 里是这样描述: A mapping from String values ... 
- 【转】Android各种Adapter的用法
		转自:http://my.oschina.net/u/658933/blog/372151 Android各种Adapter的用法 发表于5个月前(2015-01-27 10:56) 阅读(143 ... 
随机推荐
- 20155206  2016-2017-2  《JAVA程序设计》  第二周学习总结
			20155206 2016-2017-2<JAVA程序设计>第二周学习总结 教材学习内容总结 类型 整数 字节 浮点数 字符 布尔 变量 变量在命名时,不可以使用数字或一些特殊字符:*.& ... 
- 20155306 2006-2007-2 《Java程序设计》第4周学习总结
			20155306 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 6.1 何谓继承 继承:面向对象中,为避免多个类间重复定义共同行为. 运 ... 
- 【课堂实践】Myod和Mycp
			实验内容 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 实验代码 od.java 截图 遇到的问题及解决办法 一开始想的方向是将得出的功能结果 ... 
- C语言复习20170805
			循环控制结构 重复处理次数时已知的循环称为计数控制的循环,若重复处理次数为未知,是由给定情况控制的,称为条件控制的循环. C语言提供for.while.do while三种循环语句实现循环结构. 循环 ... 
- 我与虚拟机的初次接触及初探Liux命令 20155338
			初识虚拟机及学习Linux命令的些许收获 虚拟机的安装 这个假期算是第一次正式的接触了虚拟机,以前在平时生活中也有听到过,但是真正自己动手安装虚拟机却是第一次,确实是既紧张又兴奋. 我是依据老师所发的 ... 
- [Vani有约会]雨天的尾巴 线段树合并
			[Vani有约会]雨天的尾巴 LG传送门 线段树合并入门好题. 先别急着上线段树合并,考虑一下这题的暴力.一看就是树上差分,对于每一个节点统计每种救济粮的数量,再一遍dfs把差分的结果统计成答案.如果 ... 
- Hadoop NameNode HA 和 ResourceManager HA
			1.集群规划 1.1 规划说明 hadoop1 cluster1 nameNode hadoop2 cluster1 nameNodeStandby ZooKeeper ResourceManager ... 
- MAVEN相关文章
			Maven入门指南① :Maven 快速入门及简单使用 Maven入门指南② :Maven 常用命令,手动创建第一个 Maven 项目 Maven入门指南③:坐标和依赖 Maven入门指南④:仓库 M ... 
- realstudio  粒子特效问题总结
			ParticleEmitter._inner_material.flags.depth_write = true;ParticleEmitter._inner_material.flags.depth ... 
- css各种鼠标手型集合
			比较齐全的鼠标手型css在国内的网站上是没搜到这么全的比如说哪个禁止的手型:鼠标往下移动即可看到效果: html代码如下: <h1>Cursors</h1> <div c ... 
