android 事件捕获
引用:http://sswilliam.blog.163.com/blog/static/18969638320111123246522/
GUI自动化测试一般离不开脚本的录制
经过调研,在Android上主要有两种思路:
1. 通过AspectJ在所有的事件处理函数前加上一段函数用来捕获事件, Android版本的foneMonkey就是采用这个思路。这实际上就是一种代码的注入。
如:
pointcut captureOnClick() : (execution(* onClick(View)));
// AspectJ compiler does not like a tab for indenting this line?!?!?!
// (And presumably many others)
before(): captureOnClick()
{
AutomationManager.record("Click", thisJoinPoint.getArgs());
}
优点是实现起来简单,而且事件针对性强,只对添加事件处理函数的widget有效,容易理解
缺点是测试需要源代码,而且没有添加事件处理函数的组件上的交互事件就无法捕获。
这是一种比较高层的捕获
2.通过JDPA与dalvik 虚拟机进行交互,通过在那些可以派发事件的函数上添加断点,然后通过分析当前vm的stackframe来获取相应的信息。
有点是不需要代码,只有apk文件也同样可以进行录制,而且面向的是底层的虚拟机,可以捕获底层事件
缺点