本发明涉及android系统的信息处理领域,尤其涉及一种android应用的activity关系图生成方法。
背景技术:
android系统的智能手机越来越普及,手机中各式各样的应用也越来越多,但对于android系统中的应用来说,来了保证应用的服务功能、使用率、好评率,对应用进行分析、维护、查修,以及定时的更新都是十分必要的。
目前对android系统中的应用进行分析、更新、查漏等一系列操作时,特别是针对的对象是一些复杂的商业软件时,都是通过相关的程序人员进行手工分析应用的运行步骤、运行逻辑等等,十分耗时且低效。
技术实现要素:
针对现有技术中存在的问题,本发明实施例提供一种android应用的activity关系图生成方法。
本发明实施例提供一种android应用的activity关系图生成方法,包括:
获取android应用对应的apk文件,并提取所述apk文件中的activity;
遍历所述activity,得到所述activity的转换关系图、布局类型和adapter;
根据所述activity的转换关系图、布局类型和adapter生成activity的用户界面;
使用所述activity的转换关系图将所述activity的用户界面连接,得到与所述用户界面关联的activity关系图。
在其中一个实施例中,所述方法还包括:
获取所述activity的方法和内部类,并检测所述activity的方法和内部类是否创建所述activity以外的其它activity;
检测到所述activity的方法和内部类创建所述activity以外的其它activity时,获取所述activity和所述其它activity之间的转换关系,通过所述转换关系获取所述activity的转换关系图。
在其中一个实施例中,所述方法还包括:
静态分析所述activity,根据所述静态分析得到所述activity的布局文件;
根据所述布局文件确定所述activity的布局类型。
在其中一个实施例中,所述方法还包括:
获取所述activity对应的每一个方法,遍历所述每一个方法;
当通过所述遍历检测到存在方法包含后端接口时,将所述方法包含后端接口的信息保存到所述adapter。
在其中一个实施例中,所述方法还包括:
遍历所述转换关系图中的activity,获取所述activity的具体布局;
根据所述activity的具体布局、所述activity的布局类型和所述activity的adapter,绘制与所述activity对应的用户界面。
在其中一个实施例中,所述方法还包括:
将所述activity的用户界面插入到所述activity的转换关系图中,得到与所述用户界面关联的activity关系图。
本发明实施例提供一种android应用的activity关系图生成装置,包括:
获取模块,用于获取android应用对应的apk文件,并提取所述apk文件中的activity;
遍历模块,用于遍历所述activity,得到所述activity的转换关系图、布局类型和adapter;
生成模块,用于根据所述activity的转换关系图、布局类型和adapter生成activity的用户界面;
连接模块,用于使用所述activity的转换关系图将所述activity的用户界面连接,得到与所述用户界面关联的activity关系图。本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述板卡软件升级方法的步骤。
本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述板卡软件升级方法的步骤。
本发明实施例提供的android应用的activity关系图生成方法,通过遍历activity得到转换关系图、布局类型和adapter,并根据转换关系图、布局类型和adapter生成用户界面,然后根据用户界面和转换关系图得到与用户界面关联的activity关系图,通过与用户界面关联的activity关系图进行应用分析,能够提高分析效率,节约时间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中android应用的activity关系图生成方法的流程图;
图2为本发明实施例中android应用的activity关系图生成装置的结构图;
图3为本发明实施例中电子设备结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的android应用的activity关系图生成方法的流程示意图,如图1所示,本发明实施例提供了一种android应用的activity关系图生成方法,包括:
步骤s101,获取android应用对应的apk文件,并提取所述apk文件中的activity。
具体地,在分析android应用时,获取与android应用对应的apk文件,并通过对应的activity获取算法获取apk文件中的所有activity,activity提供了一个屏幕,用户可以通过该屏幕进行交互以执行某些操作,例如拨打电话,拍照,发送电子邮件或查看地图。每个活动都有一个窗口,用于绘制其用户界面。
步骤s102,遍历所述activity,得到所述activity的转换关系图、布局类型和adapter。
具体地,对apk文件中的所有activity进行遍历,即对各个屏幕进行遍历,可以根据遍历的结果得到activity的转换关系图、布局类型和adapter,其中,activity的转换关系图指的是应用中的各个ui界面之间的跳转关系,布局类型指的是各个ui界面的布局,adapter是连接应用的后端数据和前端ui界面显示的适配器接口,是数据和ui界面之间的纽带。
步骤s103,根据所述activity的转换关系图、布局类型和adapter生成activity的用户界面。
具体地,根据获取的activity的转换关系图、布局类型和adapter可以生成关于activity在用户端的用户显示的用户界面,生成的方法可以比如读取activity的源码,通过activity对应的源码读取activity的方法、方法的动态组件和属性,然后通过activity的方法、方法的动态组件和属性结合布局类型以及adapter生成activity的用户界面。
步骤s104,使用所述activity的转换关系图将所述activity的用户界面连接,得到与所述用户界面关联的activity关系图。
具体地,将得到的activity在用户端显示的用户界面与activity的转换关系图进行连接,可以得到包含用户界面的activity之间的关系图。
本发明实施例提供的一种android应用的activity关系图生成方法,通过遍历activity得到转换关系图、布局类型和adapter,并根据转换关系图、布局类型和adapter生成用户界面,然后根据用户界面和转换关系图得到与用户界面关联的activity关系图,通过与用户界面关联的activity关系图进行应用分析,能够提高分析效率,节约时间。
在上述实施例的基础上,所述android应用的activity关系图生成方法,还包括:
获取所述activity的方法和内部类,并检测所述activity的方法和内部类是否创建所述activity以外的其它activity;
检测到所述activity的方法和内部类创建所述activity以外的其它activity时,获取所述activity和所述其它activity之间的转换关系,通过所述转换关系获取所述activity的转换关系图。
在本发明实施例中,获取activity的方法和内部类,内部类为定义在另一个类里面的类,隐藏在外部类中,并不允许除外部类以外的类访问,检测activity的方法和内部类是否创建本activity以外的其它activity,当检测到activity的方法和内部类创建本activity以外的其它activity时,获取activity和其它activity创建动作之间的转换关系,并通过转换关系确定activity的转换关系图。
另外,静态分析activity,根据静态分析得到activity的布局文件;布局文件可以包含activity的各种布局元素,布局类型,布局大小等等,并根据布局文件确定activity的布局类型。
另外,对于获取到的activity对应的每一个方法,遍历每一个方法;当通过遍历检测到存在方法包含后端接口时,将方法包含后端接口的信息保存到adapter,即为activity的adapter。
上述实施例中确定activity的转换关系图、布局类型和adapter步骤具体可以为:
步骤1.1,获取输入的activity,生成空activity转换关系图,记为atg,生成空activity的adapter容器,记为adapters;
步骤1.2,获取apk中的函数调用图,记为cg;
步骤1.3,获取apk的布局类型,记为layout_type;
步骤1.4,获取apk的所有类文件,记为c(1),c(2),…c(n),记i=1;
步骤1.5,获取c(i)的所有方法,记为m(1),m(2),…m(x),记k=1;
步骤1.6,判断m(k)是否调用activity,是则执行步骤1.7,否则执行步骤1.16。
步骤1.7,获取m(k)调用的activity,记为callee_act;
步骤1.8,判断c(i)是否为某个类的内部类,是则执行步骤1.9,否则执行步骤1.11;
步骤1.9,获取c(i)的外部类,记为caller_act;
步骤1.10,向atg中添加边caller_act,callee_act,执行步骤1.16;
步骤1.11,判断m(k)是否被fragment所包含,是则执行步骤1.12,否则执行步骤1.13;
步骤1.12,记包含m(k)的fragment为caller_frag,向atg中添加边caller_fragcallee_act,执行步骤1.16;
步骤1.13,根据cg获取调用m(k)的所有activity,记为caller_acts(1),caller_acts(2),…caller_acts(y),记l=1;
步骤1.14,向atg中添加边caller_acts(l),callee_act。计算l=l 1;
步骤1.15,判断是否l>y,是则执行步骤1.16,否则执行步骤1.14;
步骤1.16,判断是否m(k)调用了fragment,是则执行步骤1.17,否则执行步骤1.21;
步骤1.17,记m(k)调用的fragment为caller_frag,获取caller_frag调用的fragment,记为callee_frag;获取调用caller_frag的所有activity,记为caller_acts(1),caller_acts(2),…caller_acts(z),记a=1;
步骤1.19,向atg中添加边caller_acts(a),callee_frag,计算a=a 1;
步骤1.20,判断是否a>z,是则执行步骤1.21,否则执行步骤1.19;
步骤1.21,判断m是否包含adapter,是则执行步骤1.22,否则执行步骤1.25;
步骤1.22,记m的viewtype为view_type;
步骤1.23,记m的其他adapter为layout_file;
步骤1.24,向adapters中添加元组(c(i),viewtype,layout_file);
步骤1.25,计算k=k 1;
步骤1.26,判断是否k>x,是则执行步骤1.27,否则执行步骤1.6;
步骤1.27,计算i=i 1;
步骤1.28,判断是否i>n,是则执行步骤1.29,否则执行步骤1.5;
步骤1.29,输出atg,adapters,layout_type。
本发明实施例通过遍历activity,得到activity的转换关系图、布局类型和adapte,便用后续生成activity的用户界面。
在上述实施例的基础上,所述android应用的activity关系图生成方法,还包括:
遍历所述转换关系图中的activity,获取所述activity的具体布局;
根据所述activity的具体布局、所述activity的布局类型和所述activity的adapter,绘制与所述activity对应的用户界面。
在本发明实施例中,对于转换关系图进行便利,可以获取activity的具体布局,并根据具体布局以及activity的布局类型和activity的adapter,可以对应的绘制activity在用户端显示的用户界面。
另外,将得到的activity的用户界面插入到activity的转换关系图中,可以得到与用户界面关联的activity关系图。
上述实施例中绘制activity在用户端显示的用户界面以及将得到的activity的用户界面插入到activity的转换关系图中的步骤具体可以为:
步骤2.1获取atg中所有的activity和fragment,记为act(1),act(2)…act(n),记i=1。
步骤2.2获取act(i)的布局,记为act_layout(i)。判断act(i)的layout_type是否为静态类型,否则执行步骤2.3,是则执行步骤2.15。
步骤2.3根据atg获取act(i)的父级activity,获取父级activity的布局,记为par_layout。
步骤2.4获取act(i)的所有方法,记为m(1),m(2)…,m(x),记k=1。
步骤2.5判断m(k)是否被用于创建activity。是则执行步骤2.6,否则执行步骤。
步骤2.6获取m(k)的动态组件,记为compt。获取m(k)的相关属性,记为attr。
步骤2.7获取向par_layout中添加compt。
步骤2.8判断attr是否为一个方法,是则执行步骤2.9,否则执行步骤2.10。
步骤2.9获取attr的动态组件和相关属性,并添加至compt,执行步骤2.11。
步骤2.10获取attr的元素,并添加至compt。
步骤2.11计算k=k 1。
步骤2.12判断是否k>x,是则执行步骤2.13,否则执行步骤2.5。
步骤2.13向act_layout(i)中添加par_layout。
步骤2.14保存act_layout(i)。
步骤2.15计算i=i 1。
步骤2.16判断是否i>n,是则执行步骤2.17,否则执行步骤2.2。
步骤2.17获取adapters中的每一个元组,记为adapter(1),adapter(2)…,adapter(n),记j=1。
步骤2.18使用act_layout(j)和adapter(j)重新绘制act(i)的用户界面,并保存。
步骤2.19计算j=j 1。
步骤2.20判断是否j>n,是则执行步骤2.21,否则执行步骤2.18。
步骤2.21将重新绘制的各个acitvity的用户界面添加到atg中,得到android应用的关系图。
本发明实施例通过得到与用户界面关联的activity关系图,然后通过与用户界面关联的activity关系图进行应用分析,能够提高分析效率,节约时间。
图2为本发明实施例提供的一种android应用的activity关系图生成装置,包括:获取模块201、遍历模块202、生成模块203、连接模块204,其中:
获取模块201,用于获取android应用对应的apk文件,并提取apk文件中的activity。
遍历模块202,用于遍历activity,得到activity的转换关系图、布局类型和adapter。
生成模块203,用于根据activity的转换关系图、布局类型和adapter生成activity的用户界面。
连接模块204,用于使用activity的转换关系图将activity的用户界面连接,得到与用户界面关联的activity关系图。
在一个实施例中,装置还可以包括:
第二获取模块,用于获取activity的方法和内部类,并检测activity的方法和内部类是否创建activity以外的其它activity。
检测模块,用于检测到activity的方法和内部类创建activity以外的其它activity时,获取activity和其它activity之间的转换关系,通过转换关系获取activity的转换关系图。
在一个实施例中,装置还可以包括:
分析模块,用于静态分析activity,根据静态分析得到activity的布局文件。
确定模块,用于根据布局文件确定activity的布局类型。
在一个实施例中,装置还可以包括:
第三获取模块,用于获取activity对应的每一个方法,遍历每一个方法。
第二遍历模块,用于当通过遍历检测到存在方法包含后端接口时,将方法包含后端接口的信息保存到adapter。
在一个实施例中,装置还可以包括:
第三遍历模块,用于遍历转换关系图中的activity,获取activity的具体布局。
绘制模块,用于根据activity的具体布局、activity的布局类型和activity的adapter,绘制与activity对应的用户界面。
在一个实施例中,装置还可以包括:
插入模块,用于将activity的用户界面插入到activity的转换关系图中,得到与用户界面关联的activity关系图。
关于android应用的activity关系图生成装置的具体限定可以参见上文中对于android应用的activity关系图生成方法的限定,在此不再赘述。上述android应用的activity关系图生成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
图3示例了一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器(processor)301、存储器(memory)302、通信接口(communicationsinterface)303和通信总线304,其中,处理器301,存储器302,通信接口303通过通信总线304完成相互间的通信。处理器301可以调用存储器302中的逻辑指令,以执行如下方法:获取android应用对应的apk文件,并提取所述apk文件中的activity;遍历所述activity,得到所述activity的转换关系图、布局类型和adapter;根据所述activity的转换关系图、布局类型和adapter生成activity的用户界面;使用所述activity的转换关系图将所述activity的用户界面连接,得到与所述用户界面关联的activity关系图。
此外,上述的存储器302中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的传输方法,例如包括:获取android应用对应的apk文件,并提取所述apk文件中的activity;遍历所述activity,得到所述activity的转换关系图、布局类型和adapter;根据所述activity的转换关系图、布局类型和adapter生成activity的用户界面;使用所述activity的转换关系图将所述activity的用户界面连接,得到与所述用户界面关联的activity关系图。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
1.一种android应用的activity关系图生成方法,其特征在于,包括:
获取android应用对应的apk文件,并提取所述apk文件中的activity;
遍历所述activity,得到所述activity的转换关系图、布局类型和adapter;
根据所述activity的转换关系图、布局类型和adapter生成activity的用户界面;
使用所述activity的转换关系图将所述activity的用户界面连接,得到与所述用户界面关联的activity关系图。
2.根据权利要求1所述的android应用的activity关系图生成方法,其特征在于,所述方法还包括:
获取所述activity的方法和内部类,并检测所述activity的方法和内部类是否创建所述activity以外的其它activity;
检测到所述activity的方法和内部类创建所述activity以外的其它activity时,获取所述activity和所述其它activity之间的转换关系,通过所述转换关系获取所述activity的转换关系图。
3.根据权利要求1所述的android应用的activity关系图生成方法,其特征在于,所述方法还包括:
静态分析所述activity,根据所述静态分析得到所述activity的布局文件;
根据所述布局文件确定所述activity的布局类型。
4.根据权利要求1所述的android应用的activity关系图生成方法,其特征在于,所述方法还包括:
获取所述activity对应的每一个方法,遍历所述每一个方法;
当通过所述遍历检测到存在方法包含后端接口时,将所述方法包含后端接口的信息保存到所述adapter。
5.根据权利要求1所述的android应用的activity关系图生成方法,其特征在于,所述方法还包括:
遍历所述转换关系图中的activity,获取所述activity的具体布局;
根据所述activity的具体布局、所述activity的布局类型和所述activity的adapter,绘制与所述activity对应的用户界面。
6.根据权利要求5所述的android应用的activity关系图生成方法,其特征在于,所述方法还包括:
将所述activity的用户界面插入到所述activity的转换关系图中,得到与所述用户界面关联的activity关系图。
7.一种android应用的activity关系图生成装置,其特征在于,所述装置包括:
获取模块,用于获取android应用对应的apk文件,并提取所述apk文件中的activity;
遍历模块,用于遍历所述activity,得到所述activity的转换关系图、布局类型和adapter;
生成模块,用于根据所述activity的转换关系图、布局类型和adapter生成activity的用户界面;
连接模块,用于使用所述activity的转换关系图将所述activity的用户界面连接,得到与所述用户界面关联的activity关系图。
8.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述android应用的activity关系图生成方法的步骤。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至6任一项所述android应用的activity关系图生成方法的步骤。
技术总结