我正在做一些 ui 自动化,我可以使用 getevent 存储屏幕触摸,但是当我尝试使用 sendevent 发送它时,它需要很长时间,因此很难真正重播输入。
我已经尝试将脚本加载到设备上并在设备上本地运行脚本(带有一堆 sendevent 命令的脚本)。但这只是稍微改善了这一点。有没有其他方法可以更快地注入这些命令?
我正在做一些 ui 自动化,我可以使用 getevent 存储屏幕触摸,但是当我尝试使用 sendevent 发送它时,它需要很长时间,因此很难真正重播输入。
我已经尝试将脚本加载到设备上并在设备上本地运行脚本(带有一堆 sendevent 命令的脚本)。但这只是稍微改善了这一点。有没有其他方法可以更快地注入这些命令?
触摸处理程序在不同设备上的实现方式不同。您应该cat /proc/bus/input/devices
查看触摸处理程序的实现位置。
您还可以adb shell getevent
与设备交互并查看接口名称的输出。
您的重播需要很长时间的原因是因为 sendevent 二进制文件会打开接口文件,向其中写入数据并在每次调用 sendevent 时将其关闭。所以理论上,如果你有一堆 sendevent 命令,二进制文件是打开接口文件,写入数据并为每个命令关闭它。
我解决此问题的方法是重写 /system/core/toolbox 下的 sendevent.c 文件,以便在重播期间仅打开一次文件,写入所有数据并在重播结束时将其关闭。它非常适合我!
好的。您可以尝试从 adb shell 中的事件接口直接读取,而不是使用 getevent/sendevent 尝试:
dd if=/dev/input/event6 of=record1 # 记录
dd if=./record1 of=/dev/input/event6 #播放
但是,这可能运行得太快了......