一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质技术方案

技术编号:17032392 阅读:19 留言:0更新日期:2018-01-13 19:06
本发明专利技术公开了一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质。本方法为:1)对于待对比的两套安卓系统源码,获取每一安卓系统源码的编译信息集;2)分别提取每一所述编译信息集中的模块信息,得到两套安卓系统源码分别对应的模块信息集合;3)将两所述模块信息集合中具有同名同类型的两个模块作为对比目标,进行diff比对;4)基于抽象语法树AST对步骤3)的diff比对结果进行处理,得到一细粒度的安卓系统源码版本比对结果。本发明专利技术得到了一个细粒度的Android源码版本比对结果,能有效地提高Android研究者的分析效率。

【技术实现步骤摘要】
一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质
本专利技术涉及软件工程
,主要涉及Android系统分析,更具体地是涉及一种基于模块划分的Android源码差异性分析方法、服务器及介质。
技术介绍
作为时下最流行的移动终端操作系统之一,Android系统发展迅速,版本更新较快,每个新的版本都包含一些新的功能。对于新版本,Google官方会给出一个List进行简要介绍,但一直没有一个软件能够系统的比较新旧版本的差异。对于Android研究者而言,常常需要对Android系统进行分析、模块划分、代码迁移等,如果能清楚的了解两个版本的差别,那么,能大大减少研究者的工作量。Diff是一般源码比对的最主要的工具,但Diff只能对比同名文件,对于Android源码来说,两个文件若想进行Diff比对,必须同名同路径,否则Diff就把他们作为两个不同的文件。而对于Android源码来说,根据功能的发展,两个版本中的同一个文件可能会出现在不同的目录下,如果仅仅采用Diff去简单比对两个Android源码,则会得到不准确的结果。检索发现,中国专利申请号201410252637.X,公开了一种基于静态分析的源码多版本函数调用关系差异性标识方法,该方法通过源码静态分析技术获取源码中定义的函数列表和函数之间的静态调用关系等信息;然后将选取的两个版本源码进行Diff,结合静态分析获取的函数定义列表和调用关系标识出变化的差异部分,将变化的部分进行细致的状态分析,分别标识出函数定义和调用的修改状态、新增状态和删除状态并入库,该专利技术可以完成单个版本的内部调用关系分析和展示以及多个版本之间的调用关系差异性分析和展示,为开源软件的分析、开发、升级和维护提供了高效的辅助方法。但该方法无法解决代码迁移的问题,即当源码文件改变路径时,无法正确比对,并且比较的结果较粗粒度,无法获知函数、类改变的具体方式(如参数的改变、返回值的改变等)。针对这些不足,本专利技术设计了一个基于模块划分的Android源码差异性分析方法、服务器及介质,既解决了Diff无法分析的代码迁移的问题,又使源码比对结果更加细粒度。
技术实现思路
本专利技术技术解决问题:针对Diff无法解决代码迁移且比对结果较粗粒度,提供一种基于模块划分的Android源码差异性分析方法、服务器及介质,先将Android源码根据编译划分为不同的模块,然后基于模块进行源码比对,并从AST的角度对比对结果进行进一步处理,得到了一个细粒度的Android源码版本比对结果,能有效地提高Android研究者的分析效率。本专利技术的技术解决方案:基于模块划分的Android源码差异性分析方法、服务器及介质,其特征在于该方法将Android源码以模块为单位从AST的角度进行差异性分析,包括以下步骤:S1、设计Mysql数据库,用于存储模块信息及最终生成的版本比对数据;S2、下载要对比的两套Android源码,通过make–n–p打印make数据库即Android系统编译信息集。开头部分为GNUMake的版本信息,随后为Make命令的输出,由于使用-n选项,此部分为空。接着一行‘#Makedatabase,printedon$DATE’表示Make数据库的开始,随后是数据库的部分,每一类数据以一行注释开始,‘#Variables’包括所有全局变量以及宏函数定义;‘#ImplicitRules’:通用规则,例如.c文件到.o文件的规则;‘#Files’:包括对每一个文件的生成规则,格式为“target:dependency1dependency2”,其后用注释给出了所有局部变量的定义。分别提取每一Android系统编译信息集中的模块信息,存入Mysql数据库中,包括‘#Variables’中模块的名称、属性信息及‘#Files’中模块编译依赖的文件信息。S3、基于S2中存储的模块信息,将两套源码中每对相应模块即同名同类型的两个模块为对比目标,用diff命令进行比对;Android源码中存在很多源码迁移的情形,直接diff命令比对的局限在于,当两个相同文件的路径不同时,会识别为两个不同的文件。因此采用基于编译模块进行比对的方式,比对两个相应模块编译时依赖的文件,解决了这个问题。S4、在diff比对结果的基础上,从AST(抽象语法树)的角度分析文件具体内容,如类、函数的增、删、改的变化内容,并标记具体变化的形式,如类的属性变化,返回值变化,继承关系变化。所述步骤S1设计Mysql数据库的具体实现为:在Mysql数据库中,设计数据库表格,至少包含两套源码模块信息表,模块改变信息表,文件改变信息表,函数改变信息表,类改变信息表,能够从粗到细的存储两套源码的改变信息。其中,函数和类改变信息表中应包含具体变化形式的字段,如类的属性变化,返回值变化等。其中,记第一套源码模块信息表为Table1,第二套源码模块信息表为Table2;所述步骤S2通过解析make数据库获取模块相关信息的具体实现如下:S21、下载要进行差异性分析的两个版本的Android源码;S22、在两套源码中分别执行make–n–p,将打印输出的整个make数据库信息存入txt文件;S23、解析S22中存储的txt文件,提取模块信息。Android构建系统在生成每个模块的规则时插入了以如下规则命名的全局变量:Android.$MODULE.$ATTR。其中$MODULE为模块的名字,$ATTR为以下BUILT、CHECKED、INSTALLED、PATH、REQUIRED、STUBS、TAGS之一。本专利技术关心的有PATH、BUILT、INSTALLED。将含有这几个关键字的行解析出来,并根据BUILT的后缀和INSTALLED的路径信息分别获取模块的类型和目标平台更新存入S1中设计好的Table1和Table2中;S24、在txt中提取每个模块编译时依赖的文件集;如S2所述,提取‘#Files’后的信息,更新存入S1设计好的数据库表;所述步骤S3将两套源码中的相应模块进行diff比对的具体实现如下:S31、新建两个文件夹,android1,android2,用于存放各模块编译时依赖的文件。相应模块比对时,分别将模块编译时依赖的文件拷贝至两个文件夹根目录中;S32、从S23所述Mysql数据库中的Table1中循环读取模块信息,读取到一条模块信息后,在Table2中找到与该模块名称、类型、目标平台都一致的模块;将S24中获取的模块依赖的文件分别拷贝到S31建立的android1和android2根目录下;S33、每从Mysql数据库中提取出一对相应模块,执行一次android1和android2两个文件夹的diff比对,比对参数为-ruNa,结果包括所有比对文件及其所在路径信息、文件增加、减少的具体信息及行号标注等;将比对结果存入txt文件——con中;传统的diff是进行文件夹直接diff,由于存在代码迁移,会出现比对结果错误,本专利技术基于模块进行diff操作,可以规避此种错误。所述步骤S4从AST(抽象语法树)的角度分析文件具体内容的具体实现如下:S41、处理S33中获得的con文件,获取文件差异处的行号;S42、通过语法解析器ANTLR分析新旧源码本文档来自技高网
...
一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质

【技术保护点】
一种基于模块划分的安卓系统源码差异性分析方法,其步骤为:1)对于待对比的两套安卓系统源码,获取每一安卓系统源码的编译信息集;2)分别提取每一所述编译信息集中的模块信息,得到两套安卓系统源码分别对应的模块信息集合;3)将两所述模块信息集合中具有同名同类型的两个模块作为对比目标,进行diff比对;4)基于抽象语法树AST对步骤3)的diff比对结果进行处理,得到一细粒度的安卓系统源码版本比对结果。

【技术特征摘要】
1.一种基于模块划分的安卓系统源码差异性分析方法,其步骤为:1)对于待对比的两套安卓系统源码,获取每一安卓系统源码的编译信息集;2)分别提取每一所述编译信息集中的模块信息,得到两套安卓系统源码分别对应的模块信息集合;3)将两所述模块信息集合中具有同名同类型的两个模块作为对比目标,进行diff比对;4)基于抽象语法树AST对步骤3)的diff比对结果进行处理,得到一细粒度的安卓系统源码版本比对结果。2.如权利要求1所述的方法,其特征在于,基于抽象语法树AST对步骤3)的diff比对结果进行处理的方法为:首先通过语法解析器ANTLR将将待对比的两套安卓系统源码转换为抽象语法树AST;然后从diff比对结果中获取文件差异处的行号;然后通过语法解析器ANTLR分别分析相应行号在两抽象语法树AST中对应的语法节点,获取有变化的函数的信息和有变化的类的信息,并获取该类的父类,一直递归到文件。3.如权利要求1或2所述的方法,其特征在于,所述模块信息包括模块的名称、模块的属性信息及模块编译依赖的文件信息。4.如权利要求3所述的方法,其特征在于,所述属性信息包括模块的PATH、BUILT、INSTALLED;根据BUILT的后缀和INSTALLED的路径信息分别获取模块的类型和目标平台信息。5.如权利要求1所述的方法,其特征在于,创建一Mysql数据库,用于存储所述模块信息及所述安卓系统源码版本比对结果;其中,所述Mysql数据库至少包含两模块信息表,分...

【专利技术属性】
技术研发人员:赵红郝佳亮张艳艳吴晓慧周启明
申请(专利权)人:中国科学院软件研究所
类型:发明
国别省市:北京,11

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

1
相关领域技术
  • 暂无相关专利