sendevent、getevent解析及底层操作
getevent实时获取触控事件
getevent -lt /dev/input/event1
-t 时间
-l 文本显示状态
记录示例
// 事件类型 事件码 事件值
EV_ABS ABS_MT_TRACKING_ID 0000000f
EV_ABS ABS_MT_POSITION_X 00002bbc
EV_ABS ABS_MT_POSITION_Y 00001b6d
EV_KEY BTN_TOUCH DOWN
EV_ABS ABS_X 00002bbc
EV_ABS ABS_Y 00001b6d
EV_SYN SYN_REPORT 00000000
EV_ABS ABS_MT_TRACKING_ID ffffffff
EV_KEY BTN_TOUCH UP
EV_SYN SYN_REPORT 00000000
sendevent需要4个参数,如下:
use: sendevent device type code value
sendevent /dev/input/event1 0 0 0
type含义如下:
type 0000 Synchronization events
type 0001 Keys and buttons
type 0003 Absolute axes,即描述运动事件的值
code含义如下
0000 0000 SYN_REPORT,这里笔者简单理解为与io的flush类似
0003 0039 开始接触设备的唯一标识号,这里为0xc3a, 0xffffffff代表结束接触
0001 014a 标明触摸事件,1代表按下,0代表放开
0001 0145 表明是用手指触摸的,同样1代表按下,0代表放开
0003 0032 触摸面积
0003 0035 触摸的x坐标
0003 0036 触摸的y坐标
0003 0030 接触面椭圆长轴,非必需
0003 0031 接触面椭圆短轴,非必需
记录触控事件
cat /dev/input/event1 > /sdcard/tmp.bin
重放触控事件
cat /sdcard/tmp.bin > /dev/input/event1
弱相关
踩坑点,shell中用标准输出会把0x00当作停止符,后面的信息会被截断
echo "17 51 63 65 00 00 00 00 68 89 01 00 00 00 00 00 00 00 00 00 00 00 00 00" | xdd -r -p > /dev/input/event1
可行方法,cat /sdcard/tmp.bin > /dev/input/event1
或者写代码Runtime.getRuntime().exec("su")提升写入权限
还有一种方法就是在终端用命令行执行`chmod 777 /dev/input/event1`
参考:
通过向输入设备直接写入数据实现多点连续滑动 https://blog.seeflower.dev/archives/45/#title-6
通过sendevent实现多点连续滑动
https://bbs.kanxue.com/thread-252052.htm
Exploring /dev/input
https://thehackerdiary.wordpress.com/2017/04/21/exploring-devinput-1/
man xxd
https://man.archlinux.org/man/xxd.1.zh_CN
Read-Write data from /dev/test file in android root file system in rooted device from android app
https://stackoverflow.com/questions/29468717/read-write-data-from-dev-test-file-in-android-root-file-system-in-rooted-device