CN108090355A - 一种apk自动触发工具 - Google Patents
一种apk自动触发工具 Download PDFInfo
- Publication number
- CN108090355A CN108090355A CN201711220729.XA CN201711220729A CN108090355A CN 108090355 A CN108090355 A CN 108090355A CN 201711220729 A CN201711220729 A CN 201711220729A CN 108090355 A CN108090355 A CN 108090355A
- Authority
- CN
- China
- Prior art keywords
- apk
- interfaces
- interface
- component
- components
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/566—Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Stored Programmes (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明一种APK自动触发工具,包括:APK分析预处理模块、APK自动安装与启动模块和APK自动化交互模块三部分。APK分析预处理模块自动分析获取APK的MainActivity,PackageName,Activity等信息,为APK自动化交互做准备;APK自动安装与启动模块将目标APK自动安装到模拟器上,并在模拟器中自动启动该APK;APK自动化交互模块基于深度遍历的思想对APK中的所有组件进行自动触发。本发明可以自动安装启动APK,在APK启动运行后,实时获取屏幕中的所有组件,识别不同的UI界面和不同的组件,模拟真实用户,对不同的组件执行相应的交互行为,从而触发APK的恶意代码,暴露恶意APK。
Description
技术领域
本发明属于Android应用程序自动化交互技术领域,特别涉及一种APK自动触发工具。
背景技术
随着科学技术的迅速发展,智能手机的市场占有率急速上升,其中Android***自发布以来,得到众多手机厂商和软件厂商的青睐。在Android智能手机给人们带来众多便捷的功能的同时,也带来了很大的安全隐患。而多数恶意APK都需要与用户进行交互才会表现出恶意行为。为了触发APK的恶意行为,在使用之前暴露APK的特征,保护用户的手机安全,需要一个有效的APK自动触发工具。
Monkey是Android***自带的自动化测试工具,可以生成指定数量的随机事件,事件类型包括按键输入、触屏操作、手势输入等。但是Monkey不能自定义事件,只能随机生成事件,而随机生成的事件中,有一定几率产生触发同一个组件的重复事件,而且在产生的事件中,有一些在当前界面没有响应,无需产生,但在Monkey中无法避免。
现在普遍使用的APK自动触发工具除Monkey工具外,还有一些其他工具,这些工具还存在以下缺陷:
1、依赖于APK的源码,有一定的局限性。实际中很难获取APK的源码,即使使用反编译工具,有些源码也已经经过混淆,难以进行有效分析。
2、需要修改Android源码。Android版本不同,源码修改后兼容性方面会存在问题,而且很多APK在修改过源码的Android***中无法正常运行。
3、不能根据要求生成字符串。许多输入组件需要输入格式合适的字符串才能进行下一步操作,而现有工具或者没有生成字符串,或者生成无意义的随机字符串,不能满足要求。
发明内容
为了克服上述现有技术的缺点,本发明的目的在于提供一种APK自动触发工具,避免分析源码,有效模拟用户操作,以期获得更好的触发效果。采用深度优先遍历的思想,逐层逐项提取、识别和遍历UI组件,对应用程序中所有需要进行点击或输入文本的组件,模拟用户操作行为进行交互。而且,对于已经触发过的组件及时记录,避免重复触发同一组件,对应用程序的组件进行更加全面的遍历。本发明提供了UI界面的指纹信息构造方法以及UI界面存储栈和UI回收站来记录UI界面的遍历情况,并且可以自动生成有效的字符串来填写输入框。本发明通过构造UI界面的指纹信息来区分不同UI界面,并对遍历中在各种情况下触发的UI界面的状态进行记录,对需要继续触发的UI界面建立UI界面存储栈存储相关信息,对已经遍历完的UI界面建立UI回收站记录,对于需要填写字符串的组件可以自动生成符合要求格式的字符串。
为了实现上述目的,本发明采用的技术方案是:
一种APK自动触发工具,包括:
APK分析预处理模块,负责启动模拟器,以及分析AndroidManifest.xml文件得到APK的相关信息;
APK自动安装与启动模块,负责将目标APK自动安装到模拟器上,并在模拟器中自动启动该APK;
APK自动化交互模块,按照深度优先遍历的原则,实现模拟用户对UI界面中所获得的组件进行自动触发的功能,包括根据相关需求,自动生成字符串输入到需要输入文本内容的组件中,对需要进行点击操作的组件进行自动点击操作,以及根据组件触发顺序到达不同的UI界面。
APK分析预处理模块,由启动模拟器和分析AndroidManifest.xml两个部分组成,启动模拟器是为此工具使用提供运行环境,使此工具能有效运行,模拟用户自动触发APK;分析AndroidManifest.xml文件可以获得待测APK启动时的包名PackageName和启动时的MainActivity,为下一步启动APK做准备。同时,在分析AndroidManifest.xml文件时还可以获得待测APK的所有有效的Activity的名字,为之后交互过程中判断出现的Activity是否为待测APK的Activity提供参考信息,从而避免因为在无关UI界面进行交互而导致的时间消耗,提高运行效率。
所述APK分析预处理模块获取的APK的相关信息至少包括APK启动时的MainActivity的类名、包名PackageName以及APK中所有的Activity的类名的集合。
APK自动安装与启动模块,分为安装子模块和启动子模块,获取需要测试的APK的位置后,通过adb install命令可以将目标APK安装到模拟器中,然后根据APK分析预处理模块得到的PackageName和MainActivity信息,使用adb shell am start命令来启动这个APK。
所述APK自动安装与启动模块自动安装启动指定的APK,如果APK启动时出现故障,自动重新启动。
APK自动化交互模块,此模块采用深度优先遍历方法实现。遍历一个UI界面时,先获得此界面的所有可触发的UI组件,接着按顺序遍历获得的所有的UI组件,如果触发了某组件的UI事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,先遍历新的UI界面,遍历完成之后,再回到原UI界面继续遍历剩余的组件。在遍历过程中,如果某个界面遍历完所有的组件,对此界面执行向下滑动操作,如果界面发生变化,则把滑动后的界面也视为一个新的UI界面,进行遍历交互,如果界面已经遍历完且向下滑动不能改变界面内容,将此界面的信息存入UI回收站,然后查找此界面可以到达前一个界面的路径,按照这条路径回到之前的界面。如果某界面完全遍历完,且没有回到前一个界面的路径,则点击回退键BACK。如果点击BACK后没有回到前一个页面,而是回到了更靠前的页面,则在这个页面再点击相应按钮直到到达目标页面。
所述自动交互方法是基于“层”设计并用到了深度优先遍历算法,这是整个发明的关键。具体地,本发明中所提到的“层”是指各个不同的UI界面,在整个工具运行过程中,每个出现的UI界面必然属于且只属于某一层。在APK启动时,出现的初始UI界面为第一层,如果在第一层的某个组件触发后又出现了一个新的UI界面,那么这个界面为第二层,在第二层的组件触发后出现的之前从来没有出现过的新的UI界面为第三层,以此类推。属于第一层的只有一个UI界面,即启动后出现的第一个UI界面,属于其他层的可能会有多个UI界面。如果触发某个组件后出现的是之前就已经出现过的某层的UI界面,那么这个界面所属的层不会改变,还是原来的层。
所述深度优先遍历算法,具体如下:
1、采用DFS方法,遍历时,先启动应用程序,每遍历一个UI界面,需要先获得此界面的所有可触发的UI组件,接着按顺序遍历所有的UI组件,如果触发了某组件的UI事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,先遍历新的UI界面,遍历完成之后,再回到原UI界面继续遍历剩余的组件。
2、在遍历过程中,如果某个界面遍历完所有的组件,对此界面执行向下滑动操作,如果界面发生变化,则把滑动后的界面也视为一个新的UI界面,进行遍历交互,如果界面已经遍历完成且向下滑动不能改变界面内容,则查找此界面可以到达前一个界面的路径,按照这条路径回到之前的界面。如果某界面完全遍历完,且没有回到前一个界面的路径时,可以点击回退键BACK。
3、如果点击BACK后没有回到前一个页面,而是回到了更靠前的页面,则在这个页面再点击相应按钮直到到达目标页面。
在APK工具执行过程中需要判断UI界面是否相同,具体地,本发明通过为各个UI界面构建指纹来唯一标识每个UI界面,而UI界面由多个不同的组件组成,所以在构建UI界面的指纹信息之前,需要先构建不同组件的指纹信息。所述APK自动化交互模块对每个UI界面,根据界面中所有组件的类型、大小、坐标信息和所在的Activity的类名,用Hash算法都生成唯一的指纹值,从而对不同的UI界面进行区分,所述UI界面指纹值的构建方法如下:
先构建组成UI界面的不同组件的指纹信息,一个组件的指纹信息由以下内容构成:
(1)组件的类型;
(2)组件的坐标信息;
(3)组件的大小;
(4)组件所在的Activity的类名;
利用以上信息按照先后顺序进行字符串拼接,最后利用Hash算法得到固定长度的指纹值,UI界面的指纹信息由上述得到的各个组件的指纹值拼接后,再使用一次Hash算法得到。
根据UI界面的指纹值是否相同,判断出UI界面是否相同,具体判断方法为:
步骤1、如果两个UI界面的Activity类名不同,则为不同的UI界面,否则进入下一步;
步骤2、如果两个UI界面里的组件数目不一样,则为不同的UI界面,否则进入下一步;
步骤3、如果两个UI界面的指纹信息不一致,则为不同的UI界面,否则为相同的UI界面。
所述APK自动化交互模块中,为了保证可以将获得的所有UI界面都能按顺序完全遍历,本发明构建了一个UI界面的存储栈,即UI触发栈。
具体地,在对一个APK进行自动触发时,整个程序中有一个UI触发栈,这个栈按顺序存储了所有出现过且没有完全遍历完其中所有组件的UI界面。当某个UI界面正在被遍历时,如果出现了一个新的UI界面,那么就将旧的UI界面的当前信息储存起来,并将这个旧的UI界面压入UI触发栈。当UI触发栈内在这个UI界面之上的各个UI界面都已经出栈且这些UI界面中的组件都被遍历完之后,将此UI界面弹出栈,遍历此UI界面中尚未遍历的组件,如果全部组件都已经遍历完,那么,直接将此UI界面标记为“已经触发完成”,不再入栈。
而对于那些标记为“已经触发完成”的UI界面,在之后的交互过程中可能还会出现,为了避免重复遍历这些UI界面,本发明还构建了一个UI回收站,用于存放那些界面中组件已经完全交互完毕的UI界面。在本工具的运行过程中,如果出现了一个新的UI界面,判断这个界面是否为UI回收站中的界面,如果是则不需要遍历,直接离开此UI界面,否则按照要求对此UI界面进行遍历交互。
所述APK自动化交互模块中,本发明主要对可以点击和需要文本输入的组件进行模拟交互,通过模拟这两种交互操作,模拟用户动作可以与大多数的组件进行交互,覆盖率较高。可点击的组件包括Button,RadioButton,ImageView,TextView,CheckBox等。
对需要点击的组件进行点击操作,对于需要输入字符串的组件,则按照相关需求,生成相应格式的字符串。具体地,对于EditText这类组件,需要用户输入文本信息,而这些文本输入框通常需要输入的是指定格式的文本,例如“用户名”、“密码”、“手机号”等,这些格式信息通常在组件的text属性值注明,为了能够更好地模拟用户来进行文本输入,本发明自动生成符合要求的字符串。本发明中指定了“邮箱”、“手机号”、“验证码”、“用户名”、“密码”这些类型的字符串的生成格式,在进行自动触发时,如果文本输入框需要的字符是这些类型的,则按要求生成符合格式要求的字符串输入,如果需要的字符串类型是发明中没有指定过输入格式的,则生成随机字符串输入。
更加具体地,在工具使用时,首先,根据一个UI界面中各个组件的class属性提取所有需要文本输入的组件,然后根据各个文本输入组件的text属性值,自动生成符合需要的字符串输入,之后再触发其他组件。许多UI界面中的组件需要文本输入后才能有效触发,自动输入有效字符串可以更好地模拟用户操作。
对于可以向下滑动的UI界面,在当前界面中所有组件都触发过后,进行向下滑动操作,获取更多组件,进行更加全面的触发。
所述APK自动化交互模块对APK中的所有UI界面,按照深度优先搜索算法的思想,逐层逐项提取、识别和遍历界面中的UI组件,对识别出来的组件进行全面的触发。
与现有技术相比,本发明的有益效果是:
1、避免重复触发同一组件。
已有的可以用于模拟用户自动触发的工具主要是Monkey工具,然而这类工具在运行时会随机选择事件流,如果需要触发多次,会有很大的几率重复触发一些组件,重复一些事件流,同时,也有一些比较重要的事件流可能在运行时不会被触发,难以暴露APK中存在的问题,对APK的测试不全面。本发明则采用分层次的方式,对每层中的所有组件,可以进行全面的交互,而且已经触发过的组件在之后的运行过程中不会被再次触发,避免重复,节省大量因重复触发同一个组件而消耗的时间。
2、基于层次结构设计发明。
APK以Activity为各个页面的载体,在各个Activity中有多个组件,本发明对应用程序的结构进行划分将每个出现的UI界面定义为一个层,每个UI界面必然属于且只属于某一层。一个Activity可能由于其中的组件的状态不同会形成不同的UI界面,属于不同的层。基于层来遍历所有的组件,遍历的情况更加全面,结构更加清晰明了,也便于编程实现和理解。
3、根据文本框需要生成符合需要的格式的字符串。
很多Android应用程序都有需要输入字符的文本输入框,现有的自动模拟触发工具主要是生成随机字符串输入,然而,许多文本输入框需要输入特定的内容,这些内容都是有固定的格式,如果输入的格式不符合,无法触发下一步的Activity界面。本发明可以根据文本输入框的text属性的内容,对需要输入的内容进行区分,生成符合需要的格式的字符串,可以满足大多数APK的输入框需要的内容。采用这种方式可以触发更多的界面,与更多的组件进行模拟交互。
4、无需APK的源代码即可自动交互。
许多自动交互的工具是基于APK的源代码设计实现的,而在实际情况下,往往很难获得APK的源码,即使使用反编译工具进行反编译,也会因为代码混淆等原因得不到正确的源码。本发明则不需要源码,由于本发明是模拟用户的各种操作对应用程序上的组件进行触发,在运行时只需要获取当前界面上的所有组件的相关信息,再模拟用户对这些组件进行点击或输入字符串等操作,整个过程中都模拟用户的操作,不需要用到源代码,可以省去反编译的步骤,而且更加接近用户的真实交互行为。
5、组件交互更加全面。
对每一层的UI界面中的组件,本发明都会记录在界面信息中,各个组件是否已经被触发过也会记录,在工具运行时,只对未被触发过的组件进行模拟交互,而且只有在一个界面中的所有组件都被触发过后,此界面才被视为已经完全触发过。本发明可以对应用程序中的组件进行更加全面的模拟触发,暴露更多隐藏在组件中的恶意代码。
附图说明
图1为本发明***整体结构图。
图2为本发明APK自动化交互模块流程图。
具体实施方式
下面结合附图和实施例详细说明本发明的实施方式。
如图1所示,APK自动触发工具由三个部分组成,分别是APK分析预处理模块、APK自动安装与启动模块和APK自动化交互模块。
首先需要为APK自动触发工具提供运行环境,并获取APK启动的相关信息。APK分析预处理模块包括启动模拟器和分析AndroidManifest.xml两个部分,启动模拟器为APK自动触发工具提供运行环境;分析APK的AndroidManifest.xml文件可以获得待测APK的包名PackageName和启动时的MainActivity,为下一步启动APK做准备。
然后需要安装并启动APK。应用程序处理模块分为安装子模块和启动子模块。获取需要测试的APK的位置后,通过adb install<APKPath>命令可以将目标APK安装到模拟器中,然后根据预处理模块得到的包名PackageName和MainActivity的类名信息,使用adbshell am start–n<package_name>/<package_name>.<main_activity_name>命令来启动这个APK。
接着,对APK进行全面的触发。应用自动化交互模块负责遍历APK中的所有组件。从启动后的第一个UI界面开始,每得到一个UI界面,先获得此界面的所有可交互的UI组件,接着按顺序遍历所有的UI组件,如果触发了某组件的UI事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,先遍历新的UI界面,遍历完成之后,再回到原UI界面继续遍历剩余的组件。在遍历过程中,如果某个界面遍历完所有的组件,对此界面执行向下滑动操作,如果界面发生变化,则把滑动后的界面也视为一个新的UI界面,进行遍历交互,如果界面已经遍历完成且向下滑动不能改变界面内容,将此界面的信息存入UI回收站,然后查找此界面可以到达前一个界面的路径,按照这条路径回到之前的界面。如果某界面完全遍历完,且没有回到前一个界面的路径,则点击回退键BACK。如果点击BACK后没有回到前一个页面,而是回到了更靠前的页面,则在这个页面再点击相应组件直到到达前一个页面。
本发明中关键技术的详细介绍如下:
1、获取APK相关信息
主要是获取APK启动所需的PackageName和MainActivity,以及获得待测APK的所有有效的Activity的名字,为之后交互过程中判断出现的Activity是否为待测APK的Activity提供参考信息从而避免因为在无关UI界面进行交互而导致的时间消耗,提高发明的效率。这些信息都是通过分析AndroidManifest.xml文件得到。
通过aapt dump xmltree<APKPath>AndroidManifest.xml命令得到AndroidManifest.xml的内容。在得到的内容中,根据“A:package=”字符串得到包名,根据“A:android name=”以及“android.intent.action.MAIN”字符串得到主Activity的类名,根据“E:activity”以及“A:android name=”字符串得到Activity的类名。
2、安装启动APK
主要是将指定的APK安装到模拟器中,启动该APK,为下一步遍历交互做准备。安装与启动都是通过adb命令实现。具体如下:
adb install<APKPath>命令将目标APK安装到模拟器中,然后根据APK分析预处理模块得到的信息,使用adb shell am start–n<package_name>/<package_name>.<main_activity_name>命令来启动这个APK。
3、构建组件的指纹信息
获取到UI界面,其中有许多组件,为避免重复触发,需要对每个组件构建一个指纹信息来唯一标识,一个组件的指纹信息由以下内容构成:
(1)组件类型,如RadioButton,ImageView,TextView;
(2)组件的坐标信息;
(3)组件的大小;
(4)组件所在的Activity的类名。
利用以上信息按照先后顺序进行字符串拼接,最后利用Hash算法得到固定长度的指纹值。UI界面的指纹信息由上述得到的各个组件的指纹值拼接后,再使用一次Hash算法得到。
4、自动遍历识别出的所有组件
采用深度优先遍历的方法进行UI遍历,如图2所示,步骤为:
1)初始化,置UI界面存储栈和UI回收站为空,把APK的初始UI界面压入UI界面存储栈中;
2)如果UI界面存储栈为空,则结束;否则,弹出栈顶的UI,作为当前触发的UI,记为UI1,获取UI1中需要触发的组件的集合,对于集合中的每一个组件,执行以下操作:
i.根据组件类型进行点击或输入字符串等操作,之后得到新的UI,记为UI2;
ii.判断UI2与UI1是否相同,如果相同则继续触发此UI中的下一个未触发组件,回到i,否则,进入iii;
iii.如果UI2为UI回收站中已有的UI,则点击回退键回到UI1,继续触发UI1中下一个未触发的组件,回到i,否则,进入iv;
iv.如果UI2为UI界面存储栈中已有的UI,则按照使UI1呈现的组件的触发顺序,在各个UI中依次点击对应的组件,重新回到UI1,然后继续触发下一个未触发的组件,回到i,否则,进入v;
v.把UI1和UI2依次压入UI界面存储栈中,然后回到2),开始触发新的UI中的组件;
3)UI1中的组件触发完后,将UI1存入UI回收站中,回到2)。
综上,本发明按照深度优先搜索的思路实现,即遍历时,先启动APK,接着遍历所有的UI界面。每遍历一个UI界面时,需要先获得此界面的所有有效UI组件,然后遍历所获得的所有的UI组件,并根据UI组件类型的不同,触发不同的UI组件事件。如果触发某组件的UI组件事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,然后遍历新的UI界面,遍历完成之后,再回到原UI界面继续触发其他的组件。
本发明模拟用户的各种操作对APK的组件进行触发,在运行时只需要获取当前界面上的所有组件的相关信息,再模拟用户对这些组件进行点击或输入字符串等操作,整个过程中都模拟用户的操作,更符合用户使用时的情况。
本发明避免了重复触发组件。本发明采用分层的方式,将每个出现的UI界面定义为一个层,基于层来遍历所有的组件。对每层中的组件,可以进行全面交互,已经触发过的组件在***运行过程中不会再次触发,避免重复,节省大量因重复触发组件而消耗的时间。本发明可以对APK中的组件进行更加全面的触发,暴露更多隐藏在组件中的恶意行为。
本发明根据文本框需要生成相应格式的字符串。本发明可以根据文本输入框的text属性的内容,生成相应格式的字符串,满足多数文本输入框的需要。从而触发更多的界面,与更多的组件进行模拟交互。
本发明不需要APK的源代码。由于本发明是模拟用户的各种操作对APK上的组件进行触发,在运行时只需要获取当前界面上的所有组件的相关信息,再模拟用户对这些组件进行点击或输入字符串等操作,不需要用到源代码,免去反编译的步骤,也更加接近用户的真实交互行为。
Claims (10)
1.一种APK自动触发工具,其特征在于,包括:
APK分析预处理模块,负责启动模拟器,以及分析AndroidManifest.xml文件得到APK的相关信息;
APK自动安装与启动模块,负责将目标APK自动安装到模拟器上,并在模拟器中自动启动该APK;
APK自动化交互模块,按照深度优先遍历的原则,实现模拟用户对UI界面中所获得的组件进行自动触发的功能,包括根据相关需求,自动生成字符串输入到需要输入文本内容的组件中,对需要进行点击操作的组件进行自动点击操作,以及根据组件触发顺序到达不同的UI界面。
2.根据权利要求1所述APK自动触发工具,其特征在于,所述APK分析预处理模块由启动模拟器和分析AndroidManifest.xml两个部分组成,启动模拟器为工具使用提供运行环境,使工具能有效运行,模拟用户自动触发APK;分析AndroidManifest.xml文件以获得待测APK启动时的包名PackageName和启动时的MainActivity,为下一步启动APK做准备;同时,在分析AndroidManifest.xml文件时还获得待测APK的所有有效的Activity的名字,为之后交互过程中判断出现的Activity是否为待测APK的Activity提供参考信息;所述APK分析预处理模块获取的APK的相关信息至少包括APK启动时的MainActivity的类名、包名PackageName以及APK中所有的Activity的类名的集合。
3.根据权利要求1所述APK自动触发工具,其特征在于,所述APK自动安装与启动模块,分为安装子模块和启动子模块,获取需要测试的APK的位置后,通过adb install命令将目标APK安装到模拟器中,然后根据PackageName和MainActivity信息,使用adb shell amstart命令来启动这个APK;所述APK自动安装与启动模块自动安装启动指定的APK,如果APK启动时出现故障,自动重新启动。
4.根据权利要求1所述APK自动触发工具,其特征在于,所述APK自动化交互模块采用深度优先遍历方法实现,遍历一个UI界面时,先获得此界面的所有可触发的UI组件,接着按顺序遍历获得的所有的UI组件,如果触发了某组件的UI事件后,UI界面发生了变化,则把原UI界面的信息存入栈中,先遍历新的UI界面,遍历完成之后,再回到原UI界面继续遍历剩余的组件,在遍历过程中,如果某个界面遍历完所有的组件,对此界面执行向下滑动操作,如果界面发生变化,则把滑动后的界面也视为一个新的UI界面,进行遍历交互,如果界面已经遍历完且向下滑动不能改变界面内容,将此界面的信息存入UI回收站,然后查找此界面可以到达前一个界面的路径,按照这条路径回到之前的界面,如果某界面完全遍历完,且没有回到前一个界面的路径,则点击回退键BACK,如果点击BACK后没有回到前一个页面,而是回到了更靠前的页面,则在这个页面再点击相应按钮直到到达目标页面。
5.根据权利要求1所述APK自动触发工具,其特征在于,在APK自动化交互过程中:
对需要点击的组件进行点击操作,对于需要输入字符串的组件,则按照相关需求,生成相应格式的字符串,在使用时,首先,根据一个UI界面中各个组件的class属性提取所有需要文本输入的组件,然后根据各个文本输入组件的text属性值,自动生成符合需要的字符串输入,之后再触发其他组件;
对于可以向下滑动的UI界面,在当前界面中所有组件都触发过后,进行向下滑动操作,获取更多组件,进行更加全面的触发。
6.根据权利要求1所述APK自动触发工具,其特征在于,所述APK自动化交互模块对每个UI界面,根据界面中所有组件的类型、大小、坐标信息和所在的Activity的类名,用Hash算法都生成唯一的指纹值,从而对不同的UI界面进行区分,所述UI界面指纹值的构建方法如下:
先构建组成UI界面的不同组件的指纹信息,一个组件的指纹信息由以下内容构成:
(1)组件的类型;
(2)组件的坐标信息;
(3)组件的大小;
(4)组件所在的Activity的类名;
利用以上信息按照先后顺序进行字符串拼接,最后利用Hash算法得到固定长度的指纹值,UI界面的指纹信息由上述得到的各个组件的指纹值拼接后,再使用一次Hash算法得到。
7.根据权利要求6所述APK自动触发工具,其特征在于,根据UI界面的指纹值是否相同,判断出UI界面是否相同,具体判断方法为:
步骤1、如果两个UI界面的Activity类名不同,则为不同的UI界面,否则进入下一步;
步骤2、如果两个UI界面里的组件数目不一样,则为不同的UI界面,否则进入下一步;
步骤3、如果两个UI界面的指纹信息不一致,则为不同的UI界面,否则为相同的UI界面。
8.根据权利要求1所述APK自动触发工具,其特征在于,为了保证将获得的所有UI界面都能按顺序完全遍历,构建一个UI界面的存储栈,即UI触发栈,在对一个APK进行自动触发时,整个程序中有一个UI触发栈,这个栈按顺序存储了所有出现过且没有完全遍历完其中所有组件的UI界面,当某个UI界面正在被遍历时,如果出现了一个新的UI界面,那么就将旧的UI界面的当前信息储存起来,并将这个旧的UI界面压入UI触发栈,当UI触发栈内在这个UI界面之上的各个UI界面都已经出栈且这些UI界面中的组件都被遍历完之后,将此UI界面弹出栈,遍历此UI界面中尚未遍历的组件,如果全部组件都已经遍历完,那么,直接将此UI界面标记为“已经触发完成”,不再入栈。
9.根据权利要求8所述APK自动触发工具,其特征在于,为避免重复遍历所述被标记为“已经触发完成”的UI界面,构建一个UI回收站,用于存放那些界面中组件已经完全交互完毕的UI界面,在运行过程中,如果出现了一个新的UI界面,判断这个界面是否为UI回收站中的界面,如果是则不需要遍历,直接离开此UI界面,否则按照要求对此UI界面进行遍历交互。
10.根据权利要求1所述APK自动触发工具,其特征在于,所述APK自动化交互模块对APK中的所有UI界面,按照深度优先搜索算法的思想,逐层逐项提取、识别和遍历界面中的UI组件,对识别出来的组件进行全面的触发。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711220729.XA CN108090355B (zh) | 2017-11-28 | 2017-11-28 | 一种apk自动触发工具 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711220729.XA CN108090355B (zh) | 2017-11-28 | 2017-11-28 | 一种apk自动触发工具 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108090355A true CN108090355A (zh) | 2018-05-29 |
CN108090355B CN108090355B (zh) | 2020-10-27 |
Family
ID=62172352
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711220729.XA Active CN108090355B (zh) | 2017-11-28 | 2017-11-28 | 一种apk自动触发工具 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108090355B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112256636A (zh) * | 2020-11-10 | 2021-01-22 | 国网湖南省电力有限公司 | 面向移动应用app的数据采集*** |
CN113360373A (zh) * | 2021-05-26 | 2021-09-07 | 上海蛮犀科技有限公司 | 一种移动应用Activity页面全遍历的测试方法 |
CN114936051A (zh) * | 2022-05-31 | 2022-08-23 | 金陵科技学院 | 一种基于Android***多模态生物识别终端进行增值应用的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101989929A (zh) * | 2010-11-17 | 2011-03-23 | 中兴通讯股份有限公司 | 容灾数据备份的方法及*** |
CN103544100A (zh) * | 2012-07-12 | 2014-01-29 | 腾讯科技(深圳)有限公司 | 便携数据处理设备应用程序的测试方法、***和客户端 |
CN105468733A (zh) * | 2015-11-23 | 2016-04-06 | 上海爱数信息技术股份有限公司 | 一种基于源端数据重删的卷复制方法 |
CN105468529A (zh) * | 2015-12-15 | 2016-04-06 | 北京奇虎科技有限公司 | 一种安卓应用ui控件精准遍历方法和装置 |
CN107133519A (zh) * | 2017-05-15 | 2017-09-05 | 华中科技大学 | 一种安卓应用网络通信中隐私泄漏检测方法及*** |
-
2017
- 2017-11-28 CN CN201711220729.XA patent/CN108090355B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101989929A (zh) * | 2010-11-17 | 2011-03-23 | 中兴通讯股份有限公司 | 容灾数据备份的方法及*** |
CN103544100A (zh) * | 2012-07-12 | 2014-01-29 | 腾讯科技(深圳)有限公司 | 便携数据处理设备应用程序的测试方法、***和客户端 |
CN105468733A (zh) * | 2015-11-23 | 2016-04-06 | 上海爱数信息技术股份有限公司 | 一种基于源端数据重删的卷复制方法 |
CN105468529A (zh) * | 2015-12-15 | 2016-04-06 | 北京奇虎科技有限公司 | 一种安卓应用ui控件精准遍历方法和装置 |
CN107133519A (zh) * | 2017-05-15 | 2017-09-05 | 华中科技大学 | 一种安卓应用网络通信中隐私泄漏检测方法及*** |
Non-Patent Citations (1)
Title |
---|
田浩等: "基于卫星数据缩减的传输优化技术研究与实现", 《软件》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112256636A (zh) * | 2020-11-10 | 2021-01-22 | 国网湖南省电力有限公司 | 面向移动应用app的数据采集*** |
CN113360373A (zh) * | 2021-05-26 | 2021-09-07 | 上海蛮犀科技有限公司 | 一种移动应用Activity页面全遍历的测试方法 |
CN114936051A (zh) * | 2022-05-31 | 2022-08-23 | 金陵科技学院 | 一种基于Android***多模态生物识别终端进行增值应用的方法 |
CN114936051B (zh) * | 2022-05-31 | 2023-06-09 | 金陵科技学院 | 一种基于Android***多模态生物识别终端进行增值应用的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108090355B (zh) | 2020-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107193739B (zh) | 一种黑盒回归测试方法 | |
Memon | Automatically repairing event sequence-based GUI test suites for regression testing | |
US7801715B2 (en) | System and method for block diagram simulation context restoration | |
EP3745256A1 (en) | External code integrations within a computing environment | |
Kamimura et al. | Extracting candidates of microservices from monolithic application code | |
CN109189469B (zh) | 基于反射的安卓应用微服务化方法及*** | |
CN109189374B (zh) | 基于对象引用链的对象构造代码生成方法及*** | |
US20050240917A1 (en) | Software configuration program for software applications | |
Navarre et al. | A tool suite for integrating task and system models through scenarios | |
CN109240666B (zh) | 基于调用栈和依赖路径的函数调用代码生成方法及*** | |
CN108647147B (zh) | 一种利用图谱分析执行自动化测试机器人及其使用方法 | |
CN108399124A (zh) | 应用测试方法、装置、计算机设备和存储介质 | |
CN108090355A (zh) | 一种apk自动触发工具 | |
CN108415826A (zh) | 应用的测试方法、终端设备及计算机可读存储介质 | |
CN108829389A (zh) | 基于Appium的安卓应用自动化触发执行方法 | |
CN109801677A (zh) | 测序数据自动化分析方法、装置和电子设备 | |
Olszak et al. | Remodularizing Java programs for improved locality of feature implementations in source code | |
Silva et al. | Analysis of WIMP and post WIMP interactive systems based on formal specification | |
CN109240923B (zh) | 接口测试脚本的生成方法及计算机可读存储介质 | |
CN109491884A (zh) | 代码性能检测方法、装置、计算机设备和介质 | |
CN101976196B (zh) | 一种面向“服务质量”的代码自动生成方法 | |
CN112905451A (zh) | 应用程序的自动化测试方法及装置 | |
KR20090099977A (ko) | 예약된 컴포넌트 컨테이너 기반 소프트웨어 개발 방법 및장치 | |
Cockton et al. | Literate development: weaving human context into design specifications | |
Canny et al. | Engineering model-based software testing of WIMP interactive applications: a process based on formal models and the SQUAMATA tool |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |