本发明是一种针对不同版本的安卓应用程序(application,app),利用模糊综合评判技术建立它们之间反编译类集合映射关系的方法和装置。
背景技术
app文档是理解app功能、性能、使用方法的重要资料,也是app开发和维护的重要依据。然而,对于大量的企业和政府单位,他们往往是通过第三方团队开发应用,面临着源代码和部分文档缺失的问题。他们往往拥有初代版本或者一些重要版本的文档,而缺失其他版本的文档,对理解这些版本造成了很大困难。为了解决这一问题,一种行之有效的办法是对比不同版本app之间的差异,利用现有文档来生成其他版本的文档。而这一方法的关键一环,就是掌握不同版本间类集合的映射关系,特别地,在源码缺失的前提下,需要掌握不同版本间反编译类集合的映射关系。然而app代码量大,结构复杂,在缺失源码的情况下,类名混淆,难以理解。通过人工寻找不同版本类集合间的映射关系需要花费大量时间和精力,难以实施。
综上所述,需要一种自动建立安卓应用程序不同版本间反编译类集合映射关系的方法。它可以帮助开发人员理解不同版本间app的功能差异,从而生成版本文档。
技术实现要素:
为了克服人工对比不同版本app间反编译类集合的困难,本发明提供了一种自动建立安卓应用程序不同版本间反编译类集合映射关系的方法和装置。通过本发明可以有效提高映射关系的建立效率和准确率,其核心思想是通过隶属度刻画不同版本两个类之间的相似性,进而建立模糊矩阵,利用模糊综合评判的加权模型建立映射关系。
本发明采用的技术方案如下:
一种建立安卓应用程序不同版本间反编译类集合映射关系的方法,包括以下步骤:
1)获取两个不同版本安卓应用程序的反编译类集合,将其中一个版本的反编译类集合作为评判集,另一个版本的反编译类集合作为被评判对象;
2)确定因素集,根据评判集和因素集计算在每个因素上被评判类对于评判集中每个类的隶属度,根据隶属度形成模糊矩阵;
3)定义因素的权重,根据因素的权重和模糊矩阵计算被评判类对于评判集中每个类的总隶属度;
4)根据总隶属度的大小判定被评判类是否与评判集中的类建立映射关系。
上述方法主要包括两方面内容:定义评判参数、确定映射关系。具体说明如下:
1.定义评判参数:
1)定义评判集为c={c1,c2,…,cm},c为反编译类集合,ci(1≤i≤m)为其中的一个类;
2)定义因素集为u={u1,u2,…,un},即评判的n个标准;
3)根据评判集与因素集定义模糊矩阵:
其中rij表示从因素ui的角度来看,被评判类c′对cj的隶属度,所述隶属度是指不同版本的两个类之间能够建立映射关系的概率,概率越高则隶属度越大;c′在某个因素ui方面的表现是通过ri=[ri1,ri2,…,rim]来刻画的,ri称为单因素评价矩阵,可以看做是因素集u和类集c之间的一种模糊关系;
4)定义因素的权重为k=[k1,k2,…,kn],这里使用模糊综合评判的加权模型,则b=k*r。其中b=[b1,b2,…,bm]是模糊综合评判结果矢量,bi(1≤i≤m)为被评判类c′对ci的总隶属度;定义bl=max{b1,b2,…,bm};
5)设置隶属度的阈值为bs。
2.确定映射关系:
1)反编译两个版本的app,获取反编译源码和类集合;
2)取其中一个版本的反编译类集合,作为评判集c;另一个版本的反编译类集合作为被评判对象;
3)确定因素集u,包括类中变量个数、方法个数、类间调用关系等。根据因素集计算模糊矩阵r,其中单因素评价矩阵ri(1≤i≤n)需要做归一化处理,即
4)计算结果矢量b和bl,若bl≥bs,则判定c′与cl建立映射关系;否则,判定c′与c中任何一个类都不相关,为该版本独特的类。
一种建立安卓应用程序不同版本间反编译类集合映射关系的装置,其包括:
反编译类集合获取模块,负责获取两个不同版本安卓应用程序的反编译类集合,将其中一个版本的反编译类集合作为评判集,另一个版本的反编译类集合作为被评判对象;
模糊矩阵建立模块,负责确定因素集,根据评判集和因素集计算在每个因素上被评判类对于评判集中每个类的隶属度,根据隶属度形成模糊矩阵;
模糊综合评判模块,负责定义因素的权重,根据因素的权重和模糊矩阵计算被评判类对于评判集中每个类的总隶属度;
映射关系建立模块,负责根据总隶属度的大小判定被评判类是否与评判集中的类建立映射关系。
本发明还提供一种安卓应用程序不同版本间缺失文档生成方法,其步骤包括:
1)采用上面所述方法建立安卓应用程序不同版本间反编译类集合映射关系;
2)利用获得的不同版本间反编译类集合映射关系,根据已知版本文档确定未知版本安卓应用程序类的功能,从而获得未知版本安卓应用程序的缺失文档。
本发明提出了一种建立安卓应用程序不同版本间反编译类集合映射关系的方法,可以通过程序自动识别不同版本类之间的隶属度,建立映射关系。本发明结合了现有技术的特点,创新性地将模糊综合评判的方法运用到不同版本app类集合的对比上来,提高了开发人员对app不同版本间差异的理解效率,降低了缺失文档生成的难度。
附图说明
图1是本发明方法的步骤流程图。
具体实施方式
为使本发明的上述目的、特点、技术更加明显易懂,下面对本发明的技术方案做具体说明。
图1是本发明方法的步骤流程图,具体包括以下步骤:
(1)获取反编译类集合。
对于app的两个不同版本,由于缺失源码,需要对apk文件进行反编译。首先需要对apk文件进行解压,获取其中的dex文件,即android可执行文件。然后利用dex2jar等工具将其转化为jar包,最后利用jd-gui等工具即可获得反编译源码。从源码中提取中反编译的类集合,将其中一个版本作为评判集,另一个版本作为被评判对象。一般地,取文档较完整,结构较清晰,开发人员了解较多的版本作为评价集。
(2)确定因素集并计算模糊矩阵。
因素集是模糊综合评判方法的关键,能否设置合适的因素集关系到评判结果的正确性。对于安卓应用程序反编译类来说,可以取类的方法数、类的变量数、类方法的参数类型、类方法的返回值类型、类之间的调用关系等多个因素作为评判标准,这些信息都可以通过反编译源码的搜索分析得到。接下来便可以计算模糊矩阵,例如,对于类的方法数,如果被评判类c′的方法数和评判集中某个类ci方法数相同,那么对它的隶属度就大;相反地,它们之间方法数相差越多,隶属度就越小。这里可取c′对ci隶属度ri=nmin/nmax,其中nmin=min{n1,n2},nmax=max{n1,n2},n1为c′方法数,n2为ci方法数。
(3)确定映射关系。
计算出模糊矩阵后,就得出了在每个因素上,被评判类对于评判集中每个类的隶属度。结合权重矢量,就可以计算出被评判类对于评判集中每个类的总隶属度,它表示了被评判类与评判集中类建立映射的可能性。取其中总隶属度最大的一个,则被评判类最有可能与之映射。如果这个总隶属度大于了之前设立的阈值,那么就判定它们建立映射;否则,就判定评判集中没有类可以与被评判类建立映射,被评判类可能是一个该版本特有的类。
本发明另一实施例提供一种建立安卓应用程序不同版本间反编译类集合映射关系的装置,其包括:
反编译类集合获取模块,负责获取两个不同版本安卓应用程序的反编译类集合,将其中一个版本的反编译类集合作为评判集,另一个版本的反编译类集合作为被评判对象;
模糊矩阵建立模块,负责确定因素集,根据评判集和因素集计算在每个因素上被评判类对于评判集中每个类的隶属度,根据隶属度形成模糊矩阵;
模糊综合评判模块,负责定义因素的权重,根据因素的权重和模糊矩阵计算被评判类对于评判集中每个类的总隶属度;
映射关系建立模块,负责根据总隶属度的大小判定被评判类是否与评判集中的类建立映射关系。
本发明另一实施例提供一种安卓应用程序不同版本间缺失文档生成方法,其步骤包括:
1)采用上面所述方法建立安卓应用程序不同版本间反编译类集合映射关系;
2)利用获得的不同版本间反编译类集合映射关系,根据已知版本文档确定未知版本安卓应用程序类的功能,从而获得未知版本安卓应用程序的缺失文档。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。