4

我正在做一些 ui 自动化,我可以使用 getevent 存储屏幕触摸,但是当我尝试使用 sendevent 发送它时,它需要很长时间,因此很难真正重播输入。

我已经尝试将脚本加载到设备上并在设备上本地运行脚本(带有一堆 sendevent 命令的脚本)。但这只是稍微改善了这一点。有没有其他方法可以更快地注入这些命令?

4

2 回答 2

6

触摸处理程序在不同设备上的实现方式不同。您应该cat /proc/bus/input/devices查看触摸处理程序的实现位置。

您还可以adb shell getevent与设备交互并查看接口名称的输出。

您的重播需要很长时间的原因是因为 sendevent 二进制文件会打开接口文件,向其中写入数据并在每次调用 sendevent 时将其关闭。所以理论上,如果你有一堆 sendevent 命令,二进制文件是打开接口文件,写入数据并为每个命令关闭它。

我解决此问题的方法是重写 /system/core/toolbox 下的 sendevent.c 文件,以便在重播期间仅打开一次文件,写入所有数据并在重播结束时将其关闭。它非常适合我!

于 2012-10-19T18:29:10.740 回答
4

好的。您可以尝试从 adb shell 中的事件接口直接读取,而不是使用 getevent/sendevent 尝试:

dd if=/dev/input/event6 of=record1 # 记录

dd if=./record1 of=/dev/input/event6 #播放

但是,这可能运行得太快了......

于 2012-10-14T17:19:24.690 回答