一种自动回放Android程序的方法及系统技术方案

技术编号:15060251 阅读:56 留言:0更新日期:2017-04-06 09:54
本发明专利技术涉及一种自动回放Android程序的方法,该方法利用代码注入机制将自动回放功能注入到Android程序中,包括以下步骤:对Android程序进行反编译,获得所述Android程序的Smali文件;基于录制用户操作的基准Android程序修改所述被测Android程序的Smali文件,以便在所述被测Android程序的Smali文件中插入所述基准Android程序中执行录制功能的Smali文件,以获得修改后的Smali文件;以及对所述修改后的Smali文件进行编译,获得编辑后的被测Android程序;执行所述编辑后的被测Android程序,录制用户的操作过程。本发明专利技术还涉及一种自动回放Android程序的系统。

【技术实现步骤摘要】

本专利技术涉及一种自动回放Android程序的方法,该方法利用代码注入机制实现Android程序的自动回放。本专利技术还涉及自动回放Android程序的系统。
技术介绍
随着Android系统被越来越广泛地使用,Android程序的数量也在飞速增长。Android程序多采用Java开发,可以使用工具将Android程序进行反编译,从而得到资源文件和Smali语言的源文件,也可以使用工具将反编译得到的资源文件和Smali语言的源文件再次编译生成Android程序。为了保证Android程序的质量,开发者需要花费大量的时间用于测试。实现Android程序的自动化测试主要由3个环节构成,即用户操作脚本的自动录制、操作脚本的自动回放、脚本录制期间的程序状态和自动回放期间的程序状态的对比。现有技术为了实现“操作脚本的自动回放”,通常采用的是独立的自动回放程序,从而控制Android程序达到自动回放功能。例如CN104407982A中公开的方案,其通过独立的自动化测试装置,将手机通过USB连接进行测试,达到简单对象类型完成复杂对象类型的测试。但是采用独立的自动回放程序有以下不足:1、自动回放过程中需要动态的(临时)搜索Android程序的UI控件,导致运行效率不高;2、通过当前页面的控件管理器获取控件集,再进行检索。而不同版本的Android程序、不同类型的页面(系统页面、用户自定义页面)的页面控件管理器均可能不同。因此动态的(临时)搜索时,容易受到页面构造、显示状态(例如:页面超出显示屏幕的大小,导致某些UI控件显示在屏幕之外)等影响,可能无法搜索到指定的UI控件;3、回放时受到自动回放程序的运行环境的约束。
技术实现思路
为了解决现有技术中的上述不足,本专利技术提出了一种利用代码注入机制实现Android程序的自动回放的方法及系统。根据本专利技术实施例的实现Android程序的自动回放的方法,包括以下步骤:第一Android程序反编译步骤,对所述Android程序进行反编译,获得所述Android程序的Smali文件(S11);Smali文件修改步骤,基于具有自动回放功能的Android程序修改所述Android程序的Smali文件,以便在所述Android程序的Smali文件中注入自动回放功能,并获得修改后的Smali文件(S12);以及编译步骤,对所述修改后的Smali文件进行编译,获得编辑后的Android程序(S13);执行步骤,执行所述编辑后的Android程序,实现自动回放(S14)。根据本专利技术实施例的方法,对Android程序进行改造,在其原有功能的基础上,增加了自动回放的功能。在本专利技术的方法中,UI控件的检索过程从回放运行时的动态检索调整为对Smali代码静态分析时的检索,降低回放运行时的检索量,使得搜索UI控件的效率得以提高。同时,由于Android程序的代码特点,每一行Android源代码都可能包含若干个功能,经过反编译后,具有一个或多个功能的每一行Android源代码都会被分解为多行、每行仅有单一指令的Smali代码。通过对具有特定单一指令的Smali代码检索,可以更容易地找出UI控件,而不会有现有技术中存在的受到页面构造、显示状态(例如:页面超出显示屏幕的大小,导致某些UI控件显示在屏幕之外)等影响的问题,从而提高搜索UI控件的准确性;并且最终生成的编辑后的Android程序的运行环境没有变化,即能够直接在原先的Android程序的实际运行环境中自动回放,从而克服了受到自动回放程序的运行环境的约束的缺陷。在本专利技术的一些实施例中,该方法还包括在所述编译步骤之后执行对所述编辑后的Android程序进行重签名的重签名步骤(S215)。在本专利技术的一些实施例中,Smali文件修改步骤包括以下步骤:第二Android程序反编译步骤,对所述具有自动回放功能的Android程序进行反编译,获得所述具有自动回放功能的Android程序的Smali文件;注入步骤,在所述Android程序的Smali文件中注入所述具有自动回放功能的Android程序中执行自动回放功能的代码。在本专利技术的一些实施例中,其中具有自动回放功能的Android程序的Smali文件包括执行以下功能的代码:将UI控件对象存储在数组内(功能A)、读取回放脚本(功能B)、按脚本的定义从数组内取得UI控件(功能C)、执行控件的事件函数(功能D)、启动回放(功能E)。另外,关于smali文件的注入,其可以通过反编译后的Android程序内的配置文件取得程序主入口,并由该主入口进行功能扩展;也可以通过程序页面进行扩展。在本专利技术的一些实施例中,注入步骤具体包括以下步骤:第一插入步骤,在所述Android程序的显示程序页面的Smali文件内插入执行所述启动回放(功能E)的代码(S205);特征加载步骤,加载所有UI控件类型的Smali代码行特征规则;代码读取步骤,读取所述Android程序的Smali文件的所有代码行,根据所述特征规则查找所述Android程序的UI控件(S207-S208);第二插入步骤,在所述Android程序的UI控件的Smali代码行之后插入执行所述将UI控件对象存储在数组内(功能A)的代码(S209-S210);复制步骤,将所述读取回放脚本(功能B)、所述按脚本的定义从数组内取得UI控件(功能C)、所述执行控件的事件函数(功能D)的代码复制到所述Android程序的Smali文件集内(S211、S212、S213)。由于Android程序由一个或多个页面组成,通过发送相应页面的消息启动相应的页面。假设有2个相关的Android程序,Android-A程序和Android-B程序,用户启动第一个Android-A程序时,系统会发送该程序的主入口页面的消息来启动首页面,并启动Android-A程序的回放功能,当回放过程中,碰到由Android-A程序启动Android-B程序时,会发送Android-B的页面的消息来首次启动Android-B程序,由于程序逻辑的不同,首次启动Android-B程序的页面消息不一定是Android-B程序的主入口页面的消息,这样就可能导致Android-B程序启动后但无法及时启动程序回放这个扩展功能。而根据本实施例的方法,通过对程序各页面注入扩展回放功能,能使得Android程序能通过不同的页面启动后,都能启动回放功能。在本专利技术的一些实施例中,执行步骤进一步包括:初始化步骤,逐一加载并初始化程序页面的各个UI控件(S32);保存步骤,将各个UI控件对象保存在控件集合中并显示程序页面(S33-S34);脚本读取步骤,读取回放脚本(S35-S36);第一判断步骤判断是否有未执行的所述回放脚本,如果判断为是,则取得所述各个UI控件并执行UI控件的事件函数,如果判断为否,则结束回放(S37-S39);第二判断步骤,判断是否有编辑后的页面要显示,如果判断为是,则返回所述初始化步骤,如果判断为否,则返回所述第一判断(S40)。另外,本专利技术还提供了一种实现Android程序的自动回放的系统。专利技术效果根据本专利技术的方法,能够至少获得以下一种技术效果:1、提高搜索UI控件的效率;2、提高搜索UI控件的准确本文档来自技高网
...

【技术保护点】
一种实现Android程序的自动回放的方法,其特征在于,所述方法包括以下步骤:第一Android程序反编译步骤,对所述Android程序进行反编译,获得所述Android程序的Smali文件(S11);Smali文件修改步骤,基于具有自动回放功能的Android程序修改所述Android程序的Smali文件,以便在所述Android程序的Smali文件中注入自动回放功能,并获得修改后的Smali文件(S12);以及编译步骤,对所述修改后的Smali文件进行编译,获得编辑后的Android程序(S13);执行步骤,执行所述编辑后的Android程序,实现自动回放(S14)。

【技术特征摘要】
1.一种实现Android程序的自动回放的方法,其特征在于,所述方法包括以下步骤:第一Android程序反编译步骤,对所述Android程序进行反编译,获得所述Android程序的Smali文件(S11);Smali文件修改步骤,基于具有自动回放功能的Android程序修改所述Android程序的Smali文件,以便在所述Android程序的Smali文件中注入自动回放功能,并获得修改后的Smali文件(S12);以及编译步骤,对所述修改后的Smali文件进行编译,获得编辑后的Android程序(S13);执行步骤,执行所述编辑后的Android程序,实现自动回放(S14)。2.如权利要求1所述的方法,其特征在于,还包括在所述编译步骤之后执行对所述编辑后的Android程序进行重签名的重签名步骤(S215)。3.如权利要求1或2所述的方法,其特征在于,所述Smali文件修改步骤包括以下步骤:第二Android程序反编译步骤,对所述具有自动回放功能的Android程序进行反编译,获得所述具有自动回放功能的Android程序的Smali文件;注入步骤,在所述Android程序的Smali文件中注入所述具有自动回放功能的Android程序中执行自动回放功能的代码。4.如权利要求3所述的方法,其特征在于,所述具有自动回放功能的Android程序的Smali文件包括执行以下功能的代码:将UI控件对象存储在数组内、读取回放脚本、按脚本的定义从数组内取得UI控件、执行控件的事件函数、启动回放。5.如权利要求4所述的方法,其特征在于,所述注入步骤具体包括以下步骤:第一插入步骤,在所述Android程序的程序页面类Smali文件内插入执行所述启动回放的代码(S205);特征加载步骤,加载所有UI控件类型的Smali代码行特征规则;代码读取步骤,读取所述Android程序的Smali文件的所有代码行,根据所述特征规
\t则查找所述Android程序的UI控件(S207-S208);第二插入步骤,在所述Android程序的UI控件的Smali代码行之后插入执行所述将UI控件对象存储在数组内的代码(S209-S210);复制步骤,将所述读取回放脚本、所述按脚本的定义从数组内取得UI控件、所述执行控件的事件函数的代码复制到所述Android程序的Smali文件集内(S211、S212、S213)。6.如权利要求5所述的方法,其特征在于,所述执行步骤进一步包括:初始化步骤,逐一加载并初始化程序页面的各个UI控件(S32);保存步骤,将各个UI控件对象保存在控件集合中并显示程序页面(S33-S34);脚本读取步骤,读取回放脚本(S35-S36);第一判断步骤判断是否有未执行的所述回放脚本,如果判断为是,则取得所述各个UI控件并执行UI控件的事件函数,如果判断为否,则结束回放(S37-S39);第二判断步骤,判断是否有编辑后的页面要显示,如果判断为是,则返回所述初始化步骤,如果判断为否,则返回所述第一判断(S40)。7.一种实...

【专利技术属性】
技术研发人员:张海
申请(专利权)人:株式会社理光
类型:发明
国别省市:日本;JP

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1