`
iaiai
  • 浏览: 2196538 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android智能事件触发器---ApkViewTracer

 
阅读更多
本文介绍我业余时间开发的一个工具,ApkViewTracer,主要是通过与Android模拟器中View Server通信,可以跟踪并分析模拟器当前Views的状态,可以向指定的某个View发送事件,触发其行为。目前,这个工具主要提供两个功能:
1.      Intelligent event trigger,在apk运行过程中更拟人地更智能地触发其行为,用于辅助Android Application的动态分析。
2.      Automated testing interface,类似于Robotium,提供一组API用于Android UI自动化测试。
(Google Code :http://code.google.com/p/apk-view-tracer/)

想法来源
         关于Mobile上的Application的动态分析。Android为开发者提供的模拟器就是动态分析的容器。动态分析,其目的就是要待分析的application在其运行过程中跑出来所有的实际行为(这当然是所期望的最佳结果,实际上并不可能完全得到)。因此,在apk的运行期间,程序能与之更拟人地交互,更好地触发其行为,是十分重要的。
         Android为开发者提供了Monkey,这只是个简单的命令行程序,它直接运行在模拟器或设备的adb shell下,通过一些参数配置,生成用户或系统的伪随机事件流。主要用于压力测试。
(详见http://developer.android.com/guide/developing/tools/monkey.html)
这样便存在有两个问题:
1.      在屏幕上任意坐标位置处随机触发事件,但其实这些位置并不响应触发事件
2.      触发事件的这个行为是随机的,并没有什么策略,因此可能在规定的运行时间内,它无法触发对人而言更高优先级的view响应事件。

因此,可能需要更拟人地更智能地去触发事件,至少需要有一个可配置的接口可以实现对动态分析更高效的事件流。
       
相关技术
         Android提供了一个工具叫HierarchyViewer,它通过与设备或模拟器中的android view server通信,得到当前设备上的Views的信息,然后构建出一个View Map,并图形化呈现出来。这是我这个工具想法的最初来源。
(详见http://developer.android.com/guide/developing/tools/hierarchy-viewer.html)

         第二个工具是MonkeyRunner,它和Monkey完全不同。如果把现阶段的monkey比做是幼儿园的小孩,那么MonkeyRunner就是一个初中生了。它支持自己编写插件,控制事件,随时截图,简而言之,任何你在模拟器/设备中能干的事情,MonkeyRunner都能干,而且还可以记录和回放。我主要通过它提供的接口来实现对View的操作,以此触发事件。
(详见http://developer.android.com/guide/developing/tools/monkeyrunner_concepts.html)

         还有个chimpchat.jar,这个jar包是被MonkeyRunner调用的,它在底层与Androidadb server进行通信,官方没有相关文档,可在Android SDK tools中找其源码。通过使用它,可以完成MonkeyRunner不能完成的操作,对MonkeyRunner的使用是个补充。

程序Intelligent event trigger介绍
对人而言,使用application的过程中,最直观的感受就是图像和文字,若图像和文字中包含有提示性的信息,人通常会按照application的提示去完成操作。
现在的基本策略是,“敏感词优先”策略:如果当前的可点击View列表中,其Text中包含有预定义的敏感词,如“download”,“next”,“click”,“link”等,则优先触发包含敏感词的view的点击事件,没有的话,则随机触发当前可点击View列表。
若当前View到达View Tree的最底层,其往下再没有可响应触发事件的view,则退回到上层,若当前View在规定时间内已退出该apk的view,则可重启该apk,继续运行。

Android智能事件触发器Intelligentevent trigger程序的主要框架如下:

其中Rule Parser模块用来处理外围的规则解析,如运行时事件的分布,事件总数等。
Strategy Parser模块用于解析事件触发的策略,目前只有敏感词优先策略,但支持扩展。
而View Client是与模拟器的Android view server和adb server通信的核心模块,其结构如下:

其中Device Command模块用于与模拟器中Android View Server通信,得到Views的信息。
View Parser用来分析Views信息,得到Views的状态,包括坐标,Text,可点击,可视等。
View Operator通过与Android adb server通信,对Views进行操作,发送事件。

Automated Testing Interface介绍
而同时,我还实现了一组API,可用来做Android的UI自动化测试,其接口均包含在AutomatedTestingInterface.py文件。
其类似于Robotium框架,但Robotium可以说是一个嵌入式框架,需要待测工程的源码,并需要借助于Android的Instrumentation机制才能完成测试。而ApkViewTracer则是运行在模拟器外面,通过与Android View Server和adb server的通信,可以实现完全黑盒的UI自动化测试。

ApkViewTracer 的AutomatedTesting Interface框架

这里View Operator是对之前View Client中的View Operator模块的封装。

下一步要解决的问题
1.      Android本身还存在一些问题:如在有的模拟器中,drag事件可能被Long Click event Listener捕获,因此目前并不完全支持LongClick event 和Drag event。这个好像是Android 的Bug。
2.      Performance问题。我是用python开发的,其中混合有jython的使用。其在模拟器外围,通过与模拟器中的Server通信,来完成各项工作,因此性能也是一个问题。
  • 大小: 81.4 KB
分享到:
评论

相关推荐

    触发器-K3wise出入库单据时间限制.sql

    触发器-K3wise出入库单据时间限制,限制K3出入库单据的制单时间范围。

    数据库触发器----VC

    在本压缩包中,"数据库触发器----VC"是一个示例,它展示了如何在Visual C++环境中设计和使用数据库触发器。这个实例可能是通过ODBC(开放数据库连接)或者其他数据库API来实现的,用于在VC++应用程序中与数据库...

    测量“触发器-整流器”输入输出关系模型

    在运动控制系统中,"触发器-整流器"是一个关键组件,它负责转换交流电源为直流电源,以供后续的电机或驱动系统使用。本文将深入探讨“触发器-整流器”的输入输出关系模型,并阐述如何利用MATLAB的Simulink工具进行...

    存储过程-触发器-函数.ppt

    存储过程-触发器-函数.ppt

    第4章-触发器-习题全解.ppt

    第4章-触发器-习题全解.ppt

    触发器---FOR INSERT与INSTEAD OF

    触发器---FOR INSERT与INSTEAD OF 触发器是一种特殊的存储过程,它可以自动执行某些操作以响应特定的事件,如INSERT、UPDATE、DELETE等。触发器可以帮助我们自动执行一些必要的操作,以确保数据的一致性和完整性。...

    触发器 -New汇总.pptx

    触发器 -New汇总.pptx

    过程 -触发器 -包

    在Oracle数据库系统中,"过程-触发器-包"是一个重要的概念组合,它们是数据库管理和应用程序开发中的核心组件。下面将分别对这三个概念进行详细解释。 1. **过程(Procedure)**: 在Oracle中,过程是一组PL/SQL...

    存储过程_触发器-包-函数教程

    触发器是与数据库表相关联的PL/SQL代码,会在特定的数据库事件(如INSERT, UPDATE, DELETE)发生时自动执行。它们用于实施复杂的业务规则和审计功能,不直接由应用程序调用。例如: ```sql CREATE TRIGGER ...

    sql考试复习资料-索引--触发器-存储过程-详细查询语句

    总之,这份"sql考试复习资料-索引--触发器-存储过程-详细查询语句"是全面复习SQL知识的理想资源,通过理论学习和实践操作,你可以对数据库管理有更深入的理解,并为应对考试或实际工作做好充分准备。记得在复习时,...

    单D触发器-74V1G79

    ### 单D触发器-74V1G79 相关知识点 #### 一、产品概述 **74V1G79**是一款高级高速CMOS单正边沿触发D型触发器,采用亚微米硅栅双层金属布线(C2MOS)技术制造而成。该触发器的设计工作电压范围宽广,可支持从2V至...

    创建监控表的DML的触发器-0422

    ### 创建监控表的DML触发器 #### 背景介绍 在数据库管理与维护过程中,数据完整性至关重要。尤其在大型生产环境中,由于各种原因,可能会出现数据被意外或未授权修改的情况。这类问题通常会给数据库管理员(DBA)...

    同步RS触发器-Multisim设计数字电路仿真例程源文件.rar

    总的来说,这个"同步RS触发器-Multisim设计数字电路仿真例程源文件.rar"是一个宝贵的学习资源,它能够帮助学生和工程师们加深对同步RS触发器的理解,提高他们在Multisim平台上的电路设计和分析能力。通过实践操作,...

    数字电子技术-JK触发器-.pptx

    《数字电子技术-JK触发器》 数字电子技术是一门涉及数字信号处理和电子设备的学科,其中,JK触发器是重要的基础知识之一。JK触发器是一种双稳态电路,具有记忆功能,能够存储一位二进制数据。它是在RS触发器的基础...

    触发器-verilog代码

    在数字电路设计中,触发器是基本的存储元件,用于保存和传递二进制数据。在Verilog硬件描述语言中,触发器的实现是构建复杂数字系统的基础。本主题将详细探讨异步复位触发器、同步复位触发器、D触发器以及JK触发器在...

    数据库编程-存储过程-触发器-级联更新-SQL-server-游标、全网最全最详细编程实战

    - 触发器是数据库级别的事件响应机制,不会直接接收外部传递的参数。 - 触发器根据表数据的变化自动执行,无需用户显式调用。 #### 五、实验学时 - 实验总学时为6学时。 #### 六、实验重点及难点 1. **函数的使用...

    数字电子技术-同步RS触发器-.pptx

    《数字电子技术——同步RS触发器详解》 在数字电子技术领域,触发器是核心的存储元件,它能够保持和转换二进制信息。本文主要关注的是同步RS触发器,这是一种在时序逻辑电路中广泛使用的器件。同步RS触发器的特点...

    存储过程-触发器-ODBC数据库编程-实验报告.pdf

    触发器是特殊类型的存储过程,它会在满足特定事件(如INSERT、UPDATE或DELETE)发生时自动执行。文档提到了三种触发器:insert_s、dele_s1和dele_s2。触发器分为两种类型:FOR EACH ROW(每行触发)和FOR EACH ...

    存储过程触发器-1.ppt

    它们与表密切相关,定义在特定表上,并关联特定的数据修改事件。触发器可以扩展SQL Server的完整性约束,实现更复杂的逻辑,以确保数据的完整性和一致性。例如,它们可以用来验证输入数据的合法性,或者在数据更改时...

Global site tag (gtag.js) - Google Analytics