adb getevent/sendevent

来源:互联网 发布:网络公选课时间 编辑:程序博客网 时间:2024/05/01 12:21

          getevent&sendevent 是android系统下的一个工具,可以模拟多种按键和触屏操作,产生的是raw event,raw event经过event hub处理产生最终的gesture事件。

在调试按键,触摸屏时非常有用。

 

=== getevent ===

getevent 监控当前的事件,鼠标事件,按键事件,拖动滑动等,进入shell后执行getevent会列出/dev/input下的所有输入设备及其对应的name,当有

相应的事件是会打印相应的信息,比如按键按下后触摸TP

 # getevent
getevent
add device 1: /dev/input/event3
  name:     "ft5xxx"
add device 2: /dev/input/event5
  name:     "7k_handset"
add device 3: /dev/input/event4
  name:     "qrd_keypad"
add device 4: /dev/input/event2
  name:     "proximity"
add device 5: /dev/input/event1
  name:     "accelerometer"
add device 6: /dev/input/event0
  name:     "orientation"


/dev/input/event4: 0001 001e 00000001
/dev/input/event4: 0001 001e 00000000

其中/dev/input/event4是device的名字 0001是type, 001e是键码, 最后一个根据type不同而不同
比如上面的倒数第二条就是按下a键的keydown,最后一个是按下a的keyup
具体的type,code,value的定义可以在源码/frameworks/base/core/java/android/view/KeyEvent.java中找到

 



=== sendevent ===

 

命令格式2:adb shell sendevent [device] [type] [code] [value]

 

发送时间,格式和上面的一样,需要注意的是在get中code显示的是十六进制,而send中需要用十进制,例如

# sendevent  /dev/input/event4 1 5 1
这个命令就是发送数字4的keydown消息,所以在屏幕上就会一直打印出很多个4(因为没有发送keyup)

ps:这个在我手机上没有任何效果

 

如: adb shell sendevent /dev/input/event0 1 229 1 代表按下按下menu键

adb shell sendevent /dev/input/event0 1 229 0 代表按下松开menu键

说明:上述的命令需组合使用

另外所知道的命令如下:

Key Name                        CODE

MENU                                 229

HOME                                 102

BACK (back button)            158

CALL (call button)               231

END (end call button)         107

2. 发送鼠标事件(Touch):

命令格式:adb shell sendevent [device] [type] [code] [value]

情况1:在某坐标点上touch

如在屏幕的x坐标为40,y坐标为210的点上touch一下,命令如下

adb shell sendevent /dev/input/event0 3 0 40
adb shell sendevent /dev/input/event0 3 1 210
  
adb shell sendevent /dev/input/event0 1 330 1 //touch
adb shell sendevent /dev/input/event0 0 0 0       //it must have
  
adb shell sendevent /dev/input/event0 1 330 0 //untouch
adb shell sendevent /dev/input/event0 0 0 0 //it must have

注:以上六组命令必须配合使用,缺一不可

情况2:模拟滑动轨迹(可下载并采用aPaint软件进行试验)

如下例是在aPaint软件上画出一条开始于(100,200),止于(108,200)的水平直线

adb shell sendevent /dev/input/event0 3 0 100 //start from point (100,200)
adb shell sendevent /dev/input/event0 3 1 200
  
adb shell sendevent /dev/input/event0 1 330 1 //touch
adb shell sendevent /dev/input/event0 0 0 0
  
adb shell sendevent /dev/input/event0 3 0 101 //step to point (101,200)
adb shell sendevent /dev/input/event0 0 0 0
……………………                                                  //must list each step, here just skip
adb shell sendevent /dev/input/event0 3 0 108 //end point(108,200)
adb shell sendevent /dev/input/event0 0 0 0
  
adb shell sendevent /dev/input/event0 1 330 0 //untouch
adb shell sendevent /dev/input/event0 0 0 0

 

 

另外可以使用cat获得对应event设备信息,进入shell后

# cat /proc/bus/input/devices
cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="orientation"
P: Phys=
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=event0 cpufreq
B: EV=9
B: ABS=100 447

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="accelerometer"
P: Phys=
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=event1 cpufreq
B: EV=9
B: ABS=7

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="proximity"
P: Phys=
S: Sysfs=/devices/virtual/input/input2
U: Uniq=
H: Handlers=event2 cpufreq
B: EV=9
B: ABS=2000000

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="ft5xxx"
P: Phys=
S: Sysfs=/devices/i2c-0/0-0038/input/input3
U: Uniq=
H: Handlers=event3 cpufreq
B: EV=b
B: KEY=0
B: ABS=2650000 3

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="qrd_keypad"
P: Phys=
S: Sysfs=/devices/virtual/input/input4
U: Uniq=
H: Handlers=kbd event4 cpufreq
B: EV=3
B: KEY=2000000 0 40000800 c0040 0 0 4

I: Bus=0000 Vendor=0001 Product=0001 Version=0001
N: Name="7k_handset"
P: Phys=
S: Sysfs=/devices/virtual/input/input5
U: Uniq=
H: Handlers=kbd event5 cpufreq
B: EV=23
B: KEY=4 0 0 0 1c0800 0 0 0
B: SW=4

#

input  (开发人员的利器,需要经常输入邮箱、密码,或网址 较长字符时,特别好用)
# input
usage: input [text|keyevent]
       input text <string>
       input keyevent <event_code>

 

参考:

http://topic.csdn.net/u/20100326/17/1f0fc5a1-3bd2-4294-aa35-1bcb73357aa3.html

http://www.51testing.com/html/65/n-215865-2.html