当前位置: 首页 > 专利查询>北京大学专利>正文

关键元素差异性分析方法及系统技术方案

技术编号:20272222 阅读:14 留言:0更新日期:2019-02-02 03:33
本发明专利技术公开了一种基于关键元素差异性分析方法及系统,通过对微服务中字节码的分析筛选出需要分析的关键元素集合,并通过对各关键元素在新旧版本安卓应用之间相似度的分析判断安卓应用在版本变化过程中相对于微服务是否发生了破坏性变化,避免了在安卓应用版本发生非破坏性变化时对微服务进行无必要的修改,减少了资源浪费。同时,本发明专利技术在安卓应用发生破坏性变化时,通过分析各关键元素在新旧版本安卓应用之间的相似度,判断各关键元素是否发生了破坏性变化,以对微服务中需要修改的关键元素进行定位,避免了对微服务中没必要修改的关键元素进行修改,提高了微服务升级效率。

【技术实现步骤摘要】
关键元素差异性分析方法及系统
本专利技术涉及计算机软件,尤其涉及一种关键元素差异性分析方法及系统。
技术介绍
在移动互联网时代,用户消费内容、获得线上服务的方式主要为移动应用。单个应用中积累了大量服务及用户的使用数据等内容。然而应用之间相互独立的现状,形成了移动应用生态的“信息孤岛”。APP间的“信息孤岛”成为场景割裂、应用智能化程度难以提升的重要原因。通过网构软件行为反射技术,能够在不需要第三方开发者支持的情况下,将安卓应用封装为微服务,为打破移动应用生态的“信息孤岛”现象提供了可能。在不需要第三方配合的情况下,利用网构软件行为反射技术能够将任意安卓应用的任意功能封装为微服务。网构软件行为反射技术,通过对安卓应用的执行进行完整监测,对运行时模型监测结果进行分析并生成应用微服务。应用行为运行时模型将在运行时环境中作用于内存空间的堆栈区和代码段,从而实现指令级别反射。由于对安卓应用的执行进行监测的结果取决于安卓应用字节码,因此此技术极大地依赖安卓应用字节码及应用微服务相匹配。如果移动应用的字节码发生了变化,那么其运行时环境也会发生变化,将导致之前分析得出的微服务无法与此时的运行时环境相匹配,即应用微服务失效,网构软件行为反射技术无法正常运行。以下情况会导致应用微服务失效:1、安卓应用多渠道发布。对于同样的安卓应用,如果在不同的下载渠道发布,可能会采取不同的打包方式。造成应用的源代码发生变化。2、安卓应用版本升级。安卓应用版本升级分为两种情况,一是网构软件行为反射技术生成的应用微服务对应的源代码逻辑发生了变化;二是逻辑未发生变化。然而,在应用版本升级时,会对应用进行重新混淆、打包,即使生成的应用微服务对应的源代码逻辑未发生变化,也将由于代码混淆而造成运行时模型失效。3、安卓应用热更新。近年来,很多开发者开始使用应用的热更新框架,采用热补丁的方式,即使不升级安卓应用的版本,也可以实现对应用源码的更新。这些客观情况都可能导致网构软件行为反射技术稳定性下降,无法持续提供服务。目前,应对这种局面的传统做法是,对安卓应用市场上的应用进行升级监控,一旦发现有应用的升级,立即采取人机协同、半自动化的方式,对该安卓应用微服务进行相应升级。通过长期的实验和测算,每实施一次对微服务的升级、测试、部署等工作,平均需花费1.5人天的开发成本。这些因素使得网构软件行为反射技术的应用成本增大,经济效益降低,产生了技术和应用之间极大的鸿沟。以上三种造成应用微服务失效的原因,都是在应用发布或版本变化的过程中,安卓应用的字节码发生了一定的变化。本文统一将这种应用的字节码发生改变的情况视为应用版本发生变化,并统一称版本发生变化之前的版本为“旧版本”,版本发生变化后的版本为“新版本”。安卓应用字节码存储在安卓系统的可执行文件dex文件中。把安卓应用字节码表示为抽象语法树,则抽象语法树变化可以分为两大类:一是抽象语法树的节点本身发生了变化,例如一些Token名称的修改;二是抽象语法树的结构发生变化,例如增加一个方法、删除一个域等。在网构软件行为反射技术实际的使用场景中,多数的多渠道发布、版本升级及热更新并未影响所生成的应用微服务的实际逻辑。即抽象语法树的节点本身发生变化,结构未发生变化。本文将这些dex字节码抽象语法树中的节点定义为关键元素,即在同一安卓应用两个不同版本之间,可能导致某一版本的应用所对应的微服务与另一版本的安卓应用产生“二进制不兼容”现象的符号集合。具体到实际的场景中,对应dex字节码的类名、方法名和变量名。为了解决上文中提到的在版本变化过程中关键元素发生变化的问题,主要面临以下两点挑战:1、判断版本变化过程中是否发生破坏性变化。在版本变化的过程中,字节码发生的变化可以分为破坏性变化和非破坏性变化两类。如果由于版本变化,使得原有的微服务会给新的安卓应用字节码带来编译错误、运行时异常或者无法得到预期的结果,则为破坏性变化。反之,则为非破坏性变化。对于非破坏性版本变化,安卓应用微服务无需更新仍然能够兼容新版的安卓应用,只有对于破坏性变化,才必须更新安卓应用微服务才能兼容新版的安卓应用。如果缺少系统的判断方法,无法提前预知此安卓应用版本发生的是破坏性变化还是非破坏性变化,即使安卓应用版本发生的是非破坏性变化,开发人员仍然需要采用同样的方式,消耗1.5人天的开发成本,才能得出原安卓应用微服务无需更新即可运行的结论,产生了极大的资源浪费。然而,由于安卓字节码的复杂程度高、运行时环境多变,通过单一的方法很难提前预知安卓应用版本发生的是破坏性变化还是非破坏性变化。2、待修改的关键元素定位与修改推荐。对于安卓应用版本发生了破坏性变化的情况,需要对旧版本应用微服务中的修改位置进行自动定位,即确定出是由于哪些关键元素发生了变化,而导致旧的应用微服务无法正常工作。由于在对安卓应用进行监测后生成的应用微服务只是一个代码逻辑片段,而要在相比之下非常庞大的安卓应用源代码中找到对应的逻辑片段,并分析其中各关键元素是否发生变化,若发生变化,还要给出相应的修改推荐,这项工作的难度非常高,尤其是如何权衡工作的效率和准确性,成为另一个重要挑战。
技术实现思路
本专利技术主要目的在于,提供一种关键元素差异性分析方法及系统,以解决现有技术无法准确判断安卓应用在版本变化的过程中是否发生了破坏性变化,以及当安卓应用在版本变化的过程中发生了破坏性变化时无法准确定位需要修改的关键元素的问题。一种关键元素差异性分析方法,包括:关键元素筛选流程:对与旧版本安卓应用相匹配的微服务中的字节码进行分析,并据此筛选出影响所述微服务与新版本安卓应用之间的匹配的所有关键元素的集合;关键元素相似度分析流程:分析所述集合中的各关键元素在所述新版本安卓应用与所述旧版本安卓应用之间的相似度;破坏性变化判断流程:判断所述安卓应用由旧版本变为新版本后,相对于所述微服务是否发生了破坏性变化;需修改的关键元素定位流程:当所述安卓应用由旧版本变为新版本后,相对于所述微服务发生了破坏性变化时,根据所述各关键元素在所述新版本安卓应用与所述旧版本安卓应用之间的相似度,判断所述集合中的各关键元素在所述安卓应用由旧版本变为新版本后相对于所述微服务是否发生了破坏性变化,并将发生了破坏性变化的关键元素作为所述微服务中需要修改的关键元素。进一步地,所述关键元素筛选流程包括:步骤S1:使用访问者模式对所述微服务的dex字节码进行解析,同时,构造所述微服务的dex字节码的抽象语法树;步骤S2:遍历所述微服务的dex字节码的抽象语法树,将所述微服务的dex字节码的抽象语法树中所有Dex类节点、Dex域节点、Dex方法节点及Dex代码节点中域访问语句和函数调用语句中的类名、方法名和变量名均作为影响所述微服务与所述新版本安卓应用之间的匹配的关键元素加入所述集合。进一步地,所述关键元素相似度分析流程包括:关键元素相似度静态分析流程:根据所述旧版本安卓应用的dex字节码和所述新版本安卓应用的dex字节码,分析所述集合中的每一关键元素在所述新版本安卓应用与所述旧版本安卓应用之间的相似度;关键元素相似度动态分析流程:利用网构软件行为反射框架分别对所述新版本安卓应用和所述旧版本安卓应用的运行时栈模型中的应用活动的情况进行监测,得到所述新版本安卓本文档来自技高网
...

【技术保护点】
1.一种关键元素差异性分析方法,其特征在于,包括:关键元素筛选流程:对与旧版本安卓应用相匹配的微服务中的字节码进行分析,并据此筛选出影响所述微服务与新版本安卓应用之间的匹配的所有关键元素的集合;关键元素相似度分析流程:分析所述集合中的各关键元素在所述新版本安卓应用与所述旧版本安卓应用之间的相似度;破坏性变化判断流程:判断所述安卓应用由旧版本变为新版本后,相对于所述微服务是否发生了破坏性变化;需修改的关键元素定位流程:当所述安卓应用由旧版本变为新版本后,相对于所述微服务发生了破坏性变化时,根据所述各关键元素在所述新版本安卓应用与所述旧版本安卓应用之间的相似度,判断所述集合中的各关键元素在所述安卓应用由旧版本变为新版本后相对于所述微服务是否发生了破坏性变化,并将发生了破坏性变化的关键元素作为所述微服务中需要修改的关键元素。

【技术特征摘要】
2018.06.22 CN 20181065140831.一种关键元素差异性分析方法,其特征在于,包括:关键元素筛选流程:对与旧版本安卓应用相匹配的微服务中的字节码进行分析,并据此筛选出影响所述微服务与新版本安卓应用之间的匹配的所有关键元素的集合;关键元素相似度分析流程:分析所述集合中的各关键元素在所述新版本安卓应用与所述旧版本安卓应用之间的相似度;破坏性变化判断流程:判断所述安卓应用由旧版本变为新版本后,相对于所述微服务是否发生了破坏性变化;需修改的关键元素定位流程:当所述安卓应用由旧版本变为新版本后,相对于所述微服务发生了破坏性变化时,根据所述各关键元素在所述新版本安卓应用与所述旧版本安卓应用之间的相似度,判断所述集合中的各关键元素在所述安卓应用由旧版本变为新版本后相对于所述微服务是否发生了破坏性变化,并将发生了破坏性变化的关键元素作为所述微服务中需要修改的关键元素。2.如权利要求1所述的关键元素差异性分析方法,其特征在于,所述关键元素筛选流程包括:步骤S1:使用访问者模式对所述微服务的dex字节码进行解析,同时,构造所述微服务的dex字节码的抽象语法树;步骤S2:遍历所述微服务的dex字节码的抽象语法树,将所述微服务的dex字节码的抽象语法树中所有Dex类节点、Dex域节点、Dex方法节点及Dex代码节点中域访问语句和函数调用语句中的类名、方法名和变量名均作为影响所述微服务与所述新版本安卓应用之间的匹配的关键元素加入所述集合。3.如权利要求2所述的关键元素差异性分析方法,其特征在于,所述关键元素相似度分析流程包括:关键元素相似度静态分析流程:根据所述旧版本安卓应用的dex字节码和所述新版本安卓应用的dex字节码,分析所述集合中的每一关键元素在所述新版本安卓应用与所述旧版本安卓应用之间的相似度;关键元素相似度动态分析流程:利用网构软件行为反射框架分别对所述新版本安卓应用和所述旧版本安卓应用的运行时栈模型中的应用活动的情况进行监测,得到所述新版本安卓应用和所述旧版本安卓应用运行时栈模型监测结果;根据所述新版本安卓应用和所述旧版本安卓应用运行时栈模型监测结果,分析所述集合中的每一关键元素在所述新版本安卓应用与所述旧版本安卓应用之间的相似度。4.如权利要求3所述的关键元素差异性分析方法,其特征在于,所述关键元素相似度静态分析流程中,对于所述集合中的任一关键元素X,分析其在所述新版本安卓应用与所述旧版本安卓应用之间的相似度的步骤包括:步骤S1:计算关键元素X在所述新版本安卓应用与所述旧版本安卓应用之间的一度相似度,计算方法为:提取关键元素X在所述新版本安卓应用和所述旧版本安卓应用中的元素内特征,根据关键元素X在所述新版本安卓应用和所述旧版本安卓应用中的元素内特征计算关键元素X在所述新版本安卓应用与所述旧版本安卓应用之间的一度相似度;步骤S2:判断关键元素X是复杂元素还是简单元素,如果关键元素X是复杂元素,则将所述一度相似度作为关键元素X在所述新版本安卓应用与所述旧版本安卓应用之间的相似度,如果关键元素X是简单元素,则进入步骤S3:步骤S3:计算关键元素X在所述新版本安卓应用与所述旧版本安卓应用之间的二度相似度,并将所...

【专利技术属性】
技术研发人员:黄罡蔡华谦张舒汇张颖
申请(专利权)人:北京大学
类型:发明
国别省市:北京,11

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

1