通过adb shell sendevent 命令可以发送鼠标(触屏)、键盘等设备的事件,写成bat脚本或sh脚本后可以方便地进行自动化测试。
命令格式:adb shell getevent[device]
adb shell sendevent [device] [type] [code] [value]
其中device为设备类型,不同的UE包括的device不一样,可以通过下面的命令查看:
adb shell cat /proc/bus/input/devices
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="88pm822_hook_vol"
P: Phys=88pm822_hook_vol/input0
S: Sysfs=/devices/platform/pxa910-i2c.2/i2c-2/2-0030/88pm822-headset/input/input5
U: Uniq=
H: Handlers=kbd event5 keyreset touch_boost
B: PROP=0
B: EV=3
B: KEY=4 0 0 0 c0000 0 0 0
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="vnc-ts"
P: Phys=vnc-ts/input0
S: Sysfs=/devices/platform/vnc-ts/input/input6
U: Uniq=
H: Handlers=mouse1 event6 touch_boost touch_boost
B: PROP=0
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=11000003
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="mxt224_ts_input"
P: Phys=
S: Sysfs=/devices/virtual/input/input0
U: Uniq=
H: Handlers=event0
B: EV=9
B: ABS=2650000 0
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="gyro"
P: Phys=
S: Sysfs=/devices/virtual/input/input1
U: Uniq=
H: Handlers=event1
B: EV=5
B: REL=38
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="herring-keypad"
P: Phys=
S: Sysfs=/devices/virtual/input/input2
U: Uniq=
H: Handlers=event2 keychord
B: EV=3
B: KEY=1c0000 0 0 0
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="proximity"
P: Phys=
S: Sysfs=/devices/virtual/input/input3
U: Uniq=
H: Handlers=event3
B: EV=9
B: ABS=2000000
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="lightsensor-level"
P: Phys=
S: Sysfs=/devices/virtual/input/input4
U: Uniq=
H: Handlers=event4
B: EV=9
B: ABS=100 0
I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="compass"
P: Phys=
S: Sysfs=/devices/virtual/input/input5
U: Uniq=
H: Handlers=event5
B: EV=5
B: REL=3ff
获取上面的信息,表示从event0~event5六个device(Handles
)设备名称 说明 HANDLER mxt224_ts_input 屏幕触摸输入(鼠标) event0 Gyro 陀螺仪 event1 herring-keypad 键盘 event2 proximity 近距离感应器 event3 lightsensor-level 光感应器 event4 compass 定位仪 event5 注意:每台设备上的输入设备分布和名称都可能不一样一般主要会用到鼠标 和 键盘 ,这里为event0和event2。
0003 0035 0000008b
0003 0036 000002c0
0003 0030 00000044
0003 0032 00000004
0003 0039 00000000
0000 0002 00000000
0000 0000 00000000
0003 0035 0000008b
0003 0036 000002c0
adb shell getevent -p /dev/input/event0
看到如下信息:
add device 1: /dev/input/event0
name: "mxt224_ts_input"
events:
SYN (0000): 0000 0003
ABS (0003): 0030 value 0, min 0, max 255, fuzz 0 flat 0
0032 value 0, min 0, max 30, fuzz 0 flat 0
0035 value 0, min 0, max 1023, fuzz 0 flat 0
0036 value 0, min 0, max 950, fuzz 0 flat 0
0039 value 0, min 0, max 4, fuzz 0 flat 0
这个依然有点晦涩,大意为:#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 (finger, pen, ...) */ #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 */可以参考android主页:http://source.android.com/devices/tech/input/touch-devices.html
因此刚刚getevent获取到的内容大致可以做如下翻译: 0003 0035 0000008b // x轴0x8b的位置 0003 0036 000002c0 // y轴0x2c0的位置 0003 0030 00000044 // 触摸椭圆的长轴为0x44 0003 0032 00000004 // 0003 0039 00000000 // Tracking ID为0 0000 0002 00000000 // SYN 0000 0000 00000000 // SYN 0003 0035 0000008b 0003 0036 000002c0 0003 0030 00000000 // 触摸椭圆的长轴为0(表示离开屏幕了) 0003 0032 00000001 0003 0039 00000000 0000 0002 00000000 0000 0000 00000000
@echo off set ADB=adb -d wait-for-device rem get the event number ::%ADB% root ::%ADB% remount ::%ADB% pull /proc/bus/input/devices echo "please press CTRL+C to save" rem get the parameter %ADB% shell getevent /dev/input/eventX > out.txt %ADB% shell getevent -p /dev/input/eventX > event1.txt
rem 在(1000,1538)处点击 adb shell sendevent /dev/input/event1 3 53 1000 adb shell sendevent /dev/input/event1 3 54 1538 adb shell sendevent /dev/input/event1 0 0 0 adb shell sendevent /dev/input/event1 3 58 50 adb shell sendevent /dev/input/event1 0 0 0 adb shell sendevent /dev/input/event1 3 58 0 adb shell sendevent /dev/input/event1 0 0 0同理,滑动的脚本:
rem 从(540,1538)点滑动到(1000,1538)点 @echo off set ADB=adb -d wait-for-device %ADB% shell sendevent /dev/input/event1 3 47 1 %ADB% shell sendevent /dev/input/event1 3 57 180 adb shell sendevent /dev/input/event1 3 53 540 adb shell sendevent /dev/input/event1 3 54 1538 adb shell sendevent /dev/input/event1 0 0 0 adb shell sendevent /dev/input/event1 3 58 50 //在(540,1538)点按下 adb shell sendevent /dev/input/event1 0 0 0 adb shell sendevent /dev/input/event1 3 53 1000 adb shell sendevent /dev/input/event1 3 54 1538 adb shell sendevent /dev/input/event1 0 0 0 adb shell sendevent /dev/input/event1 3 58 50 //滑动到(1000,1538)点 adb shell sendevent /dev/input/event1 0 0 0 adb shell sendevent /dev/input/event1 3 58 0 //松开 adb shell sendevent /dev/input/event1 0 0 0