您的位置:首页 > 移动开发 > Android开发

Android自动回放工具——RERAN

2016-05-09 16:08 375 查看

一 、安卓输入子系统事件编码

安卓输入时间编码格式为:(timestamp: device: type code value)timestamp:系统开机到当前的时间device:可以产生输入事件的设备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)
types对应于一个相同逻辑输入结构的一组Codes。每个type都有一组可用的codes用于产生输入事件。每个type可用的codes的详细信息请参考Codes一节的内容。* EV_SYN:  - 用于事件间的分割标志。事件可能按时间或空间进行分割,就像在多点触摸协议中的例子。 * EV_KEY:  - 用来描述键盘,按键或者类似键盘设备的状态变化。 * EV_REL:  - 用来描述相对坐标轴上数值的变化,例如:鼠标向左方移动了5个单位。 * EV_ABS:  -用来描述相对坐标轴上数值的变化,例如:描述触摸屏上坐标的值。 * EV_MSC:  - 当不能匹配现有的类型时,使用该类型进行描述。 * EV_SW:  - 用来描述具备两种状态的输入开关。 * EV_LED:  - 用于控制设备上的LED灯的开和关。 * EV_SND:  - 用来给设备输出提示声音。 * EV_REP:  -用于可以自动重复的设备(autorepeating)。 * EV_FF:  - 用来给输入设备发送强制回馈命令。(震动?) * EV_PWR:  - 特别用于电源开关的输入。. * EV_FF_STATUS:  - 用于接收设备的强制反馈状态。例如 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)

二、SDK自带工具

getevent/sendevent这两个命令的源码在system/core/toolbox/下,sendevent.c getevent.cgetevent使用getevent获得/dev/input/eventX设备汇报的事件,这个命令还会输出所有event设备的基本信息,如下:add device 1: /dev/input/event1  name:     "mxc_ts"add device 2: /dev/input/event0  name:     "mxckpd"表明系统有两个event设备,分别对应着input设备touchscreen,keyboardsendevent使用sendevent来模拟触屏,键盘以及其他类型的event事件,sendevent /dev/input/eventX type code value/dev/input/eventX 对应一个event设备,可以通过getevent获得可用的event设备type, code, value的详细定义可参看kernel/include/linux/input.h

三、RERAN

RERAN具源码在点击打开链接(1)安装ARM交叉编译工具工具下载链接点击打开链接依据不同系统安装对应工具,完成之后配置系统环境变量,我本机是win10系统,在系统环境变量Path中添加“
;
installdir
\bin
”,其中
installdir
[/code]是你安装工具的更路径。(2)编译 Translate.java 文件为 jar(3)编译 record.c,之后将其复制到手机/data/local  路径中
arm-none-linux-gnueabi-gcc -static -o replay replay.c
adb push yourpath/replay /data/local
(4)记录事件路径,并将路径文件recordedEvents.txt
翻译成 translatedEvents.txt,然后将这个文件放入手机/data/local  路径中
adb shell getevent -tt > recordedEvents.txt
java -jar translate.jar /path/to/recordedEvents.txt /path/to/android-sdk/platform-tools/translatedEvents.txt
adb push translatedEvents.txt /data/local
(5)回访记录
adb shell /data/local/./replay /data/local/translatedEvents.txt

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: