
一、首先shell执行 "getevent" 命令可以监视触摸屏消息:

从你手指落点按下 → 滑动 直到松开 都有代码输出,因为输出格式是十六进制,为了便于分析以及模拟发送还要转换成十进制。
于是,通过分析我们就得到了该安卓设备下 按下/滑动/松开 的触摸实现代码过程,其中
"3 35 xxx"代表触摸点x坐标
"0 36 xxx"代表触摸点y坐标
"3 2F xxx" 代表多指触控时当前进行操作第n根手指,及当前正在进行操作的触摸点
"3 39 ffffffff"代表松开
"0 0 0"代表每次提交事件的必须发送的代码
于是,我们就可以通过sendevent命令在安卓设备上进行模拟操作啦
(图中代码分析:
→ 手指2 在点600x600 屏幕坐标按下
→ 手指2移动到600x900
→ 手指2松开
)

但是,通过分析Linux sendevent源码可以得出,这个函数的执行过程为:打开触摸设备驱动文件,写入代码,关闭驱动文件句柄,如果我们要用ta写脚本的话,明显是不现实的,因为反复的打开关闭文件会增加系统负担,正确的做法是自己写一个CPP代码,打开触摸驱动文件句柄 无限写入代码 在退出应用时关闭文件句柄即可√
下面放出代码:
#include
void sn(long int aa,long int bb,long int cc){
struct input_event event;
event.type = aa;
event.value = cc;
event.code = bb;
write(fd_kbd, &event, sizeof(event));
}
int main(int argc, char **argv){
fd_kbd = open("/dev/input/event4", O_RDWR);
sn(0,0,0);
}
★ 当然,虽然我的触摸设备文件是event4,但是不同设备的触摸代码/触摸文件 都是不尽相同的,所以你们还得自己分析属于自己设备专属的发送触摸消息触摸文件路径和要发送的代码。
当然,这种方法写自瞄会有个缺陷,在多指游戏时会与当前模拟操作所发送的消息相冲突导致闪屏/断触,且没有解决方法,所以不推荐大家用这种方法实现自瞄,知道原理和大概就好了。
至于鸡腿为什么不会,因为ta是自己创建触摸驱动然后模拟,并非此方法,目前网上也没有开源的源代码进行学习研究,所以我也不得而知。
#【狗子.】免责声明#
举报 0