Android sendevent真的很慢 - 如何加快速度?

时间:2012-08-22 18:53:31

标签: android user-interface automation adb

我正在做一些ui自动化,并且我能够使用getevent存储屏幕触摸,但是当我尝试使用sendevent发送它时,它需要很长时间,使得很难实际重放输入。

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

2 个答案:

答案 0 :(得分:4)

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

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

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

我解决这个问题的方法是重写/ system / core / toolbox下的sendevent.c文件,在重放期间只打开一次文件,写入所有数据并在重播结束时关闭它。它对我来说很完美!

答案 1 :(得分:3)

行。 您可以尝试从事件界面直接读取,而不是使用getevent / sendevent 在adb shell里面试试:

  

dd if = / dev / input / event6 of = record1#to record

     

dd if =。/ record1of = / dev / input / event6 #to play

然而,这可能会跑得太快......