码迷,mamicode.com
首页 > 移动开发 > 详细

Robot: 一个记录和回放Android input event(touch)的工具

时间:2015-03-06 20:50:53      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:android input event   record playback   

这个工具的主要目的就是记录屏幕上的各种操作,然后多次回放,用于稳定性测试和一些需要多次重复才能复现的bug的重现。

代码在以下位置:

       http://download.csdn.net/detail/dfysy/8479123

之前,别人转发我一个记录/回放 event的程序,在KK以前都是可以用的,但是由于Android L enable了PIE(positionindependent execution), 在L上没法用了。又没有源码,只能自己再写一个。

程序的原理:

       就是读取/dev/input下面的所有event输入,把他们都记录下来,然后在回放的时候在一个一个的写回去。记录的信息除了input_event的内容外,还需要记录该event是从哪一个input节点读入的,因为回放的时候需要知道这个event应该写入哪一个节点。

由于input_event里面记录的event发生时间和实际读取的时间会有差异,会导致回放的时候计算两个event之间的时间差出现错误(负值)。最好的设计应该是对所有读出的event再根据发生时间进行排序。但是为了简化设计,此处直接记录读取event的墙钟时间,这样虽然不同input节点间的时间关系可能有偏差。但是同一个input节点直接的顺序还是正确的。

程序的主要风格是C和C++的混合体,之所以使用C++,主要是因为使用了template处理map和vector,这样就不用使用C语言费力巴哈的去实现相关的插入查找的算法,目的是快速,不是较劲。

主要的数据结构和功能:

       map<string,int> fileName2fd; /*input filenameàinput fd*/

       map<string,int> fileName2fdr; /*记录文件中的filenameà记录文件中的fd*/

       map<int,string> fd2fileName;/*input fdàinputfilename*/

       map<int,string> fdr2fileName;/*记录文件中的fdà记录文件中的filename*/

       map<int,int> fdr2fd;/*记录文件中的fdàinputfd*/

       vector<event_info>eventListFile;/*记录文件中的所有list,这样就不用每次都读文件了*/

       vector<event_info>eventListScan; /*记录所有从input 文件节点读取到的event*/

程序主要分为以下几个部分

        1) 遍历dev/input目录,打开所有节点,(此部分使用了android的getevent部分代码)。建立fd和文件名之间的相互map

             scanAndOpenInputs(INPUT_DIR);

        2) 分析命令输入,如果是recording的话,进入receiveEvents(),读取input文件节点的event,并进行保存。此处使用了select来监控各个input。

            ret= select(max_fd, &fds, NULL, NULL, &timeout);

       3)  分析命令输入,如果是playback的话,则从文件中读出各个event,并计算各个event之间的时间差,然后根据fd和filename对应将其写入对应的文件节点。


Android.mk 里面需要加以下的选项,以便可以使用stl的库,这里采用的静态编译,以免下载到某些设备找不到库

        LOCAL_C_INCLUDES += bionic bionic/libstdc++/include external/stlport/stlport
        LOCAL_STATIC_LIBRARIES := libc libstlport_static


        LOCAL_FORCE_STATIC_EXECUTABLE := true
        include $(BUILD_EXECUTABLE)


TODO:1)增加输出到指定文件的功能,这样就可以为不同的测试内容记录不同的文件

               2)增加playback指定文件的功能,这样就可以用shell来组织各个功能的测试了。

 

       

Robot: 一个记录和回放Android input event(touch)的工具

标签:android input event   record playback   

原文地址:http://blog.csdn.net/dfysy/article/details/44103351

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!