脚本录制的实现方法

我经过调研,发现 app 的录制工具实现方式有百度 cafe,adb shell getevent 等。
cafe 使用的是 hook 方法,貌似还利用了 android 安全漏洞,但是 android4,.2 以后这个漏洞修复了,估计就没法用了吧。而且 hook 这个东西不怎么懂。
我自己想了一个录制方法,使用 android accessibility 辅助功能监听用户操作事件,通过 AccessibilityEvent 的 getSource() 方法获取事件信息。

accessibilityEvent 的事件内容

start time: 24808.582 TYPE_VIEW_CLICKED:1
current node info:android.view.accessibility.AccessibilityNodeInfo@9662; boundsInParent: Rect(0, 0 - 68, 66); boundsInScreen: Rect(60, 435 - 128, 501); packageName: cn.kuwo.player; className: android.widget.CheckBox; text: null; contentDescription: null; viewIdResName: null; checkable: true; checked: false; focusable: true; focused: false; selected: false; clickable: true; longClickable: false; enabled: true; password: false; scrollable: false; [ACTION_FOCUS, ACTION_SELECT, ACTION_CLEAR_SELECTION, ACTION_CLICK, ACTION_ACCESSIBILITY_FOCUS] familyString:root-0-0-0-0;

存在的问题

其中 view id 永远为空,AccessibilityNodeInfo 有 getViewIdResourceName 方法,但是获取的值永远为空。
请问下大家,有没有什么好的脚本录制方法? 大家一起讨论下。
此外,我还看到有些测试脚本录制工具是基于 instrumentation 的,比如 testdroid, 不知道这个如何实现录制?

录制方法比较:uiautomator 与 instrumentation 的比较

我总结了下,uiautomator 提供 AccessibilityEvent,通过这个方法,我们编写一个录制脚本,在脚本里监听 AccessibilityEvent,可以很容易捕获所有事件。但是 uiautomator 不能录制 webview。
instrumentation 框架可以通过 cafe 的方式,hook 所有的 listener,将自定义的 listener 去替换原有的 listener,并且加入录制代码。ps,这个地方有人知道 listener hook 需要 root 手机吗?
那么问题来了,uiautomator 和 instrumentation hook 这两种录制方法,到底有什么区别呢? 用哪种方法好呢? 我所了解的是 instrumentation 能够支持低版本和 webview,uiautomator 不可以,除此以外,还有什么区别吗?


↙↙↙阅读原文可查看相关链接,并与作者交流