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

基于反射的安卓应用微服务化方法及系统技术方案

技术编号:20074537 阅读:24 留言:0更新日期:2019-01-15 00:29
本发明专利技术公开了一种基于反射的安卓应用微服务化方法及系统,通过对安卓应用运行进行监控,得到应用的行为反射运行时模型,并在其中的运行时栈模型中标注包含目标数据的目标对象,生成目标对象的所有函数调用集,再根据使用函数调用集生成函数调用代码的难度为每一函数调用集进行评分,并根据评分推荐函数调用集以生成可执行的函数调用代码。对不能在运行时栈模型中生成的目标对象,在运行时堆模型中生成目标对象的所有引用链,并构造类加载器,再根据被选择的目标对象引用链生成目标对象构造代码,最后再将生成的函数调用代码和目标对象构造代码结合起来包装成微服务接口。本发明专利技术能大大减少开发安卓应用微服务的时间,有效解决安卓应用微服务开发中执行序列复杂与数据依赖复杂两大难题。

Reflective-based microservicing methods and systems for Android applications

The invention discloses a reflection-based micro-service method and system for Android application. By monitoring the operation of Android application, the application's behavior reflection runtime model is obtained, and the target object containing target data is labeled in the runtime stack model, all function call sets of the target object are generated, and then function call codes are generated according to the use of function call sets. The difficulty is to score each set of function calls, and to generate executable function call codes according to the recommended set of function calls. For the target object that cannot be generated in the runtime stack model, all reference chains of the target object are generated in the runtime heap model, and the class loader is constructed. Then the target object construction code is generated according to the selected target object reference chain. Finally, the generated function call code and the target object construction code are combined and packaged into a micro-service interface. The invention can greatly reduce the time of developing Android application microservice, and effectively solve the two major problems of complex execution sequence and complex data dependence in the development of Android application microservice.

【技术实现步骤摘要】
基于反射的安卓应用微服务化方法及系统
本专利技术涉及计算机软件,尤其涉及一种基于反射的安卓应用微服务化方法及系统。
技术介绍
应用功能及数据的开放与融合能够产生巨大的价值,但安卓应用的大部分功能与数据并不提供可程序化调用的接口,难以实现功能及数据的开放与融合。目前,实现安卓应用功能及数据的开放与融合的最好办法是将安卓应用微服务化,即将安卓应用中的功能与数据以服务的形式提取出来。对于安卓应用来说,微服务化需要在应用运行时对应用进行修改。在经典软件工程中,强调的是在开发态修改软件,并不支持安卓应用微服务化的需求。而操作系统、中间件等系统软件能够提供计算反射(computationalreflection,简称反射)机制,该机制能够实现对软件运行态的监测与控制。基于计算反射机制,能够有效解决安卓应用的微服务化问题。基于计算反射机制,通过监测应用运行时安卓系统的各种信息,生成安卓应用运行时的行为描述,对这些行为描述按需处理并生成应用控制逻辑,最终实现安卓应用的微服务化。然而,安卓应用的功能实现通常是非常复杂的,应用自身的包和所依赖的包一般数目巨大,这意味着实现功能的代码所依赖的函数数目可能很多,调用栈深度很深。行为反射技术框架所记录的执行序列是应用运行时除系统调用外的所有函数调用,所以执行序列的条目通常非常巨大,函数调用栈很深。这是执行序列复杂性的一方面体现。另一方面,由于执行序列中某一函数的构造可能存在多种方式,因此对于目标功能与数据可能存在多个运行时栈模型切片,每个切片对应一种微服务开发方法。每个切片可能是单线程也可能是多线程结构,不同结构的微服务开发方法也不相同。不同的切片生成微服务的难度有较大差别,这也是执行序列复杂性的体现。同时,对于某一特定的运行时栈模型切片,需要从目标结果或目标数据一步步反向构造能实现目标功能的代码片段。构造执行序列中的某条函数调用时,如果该函数的执行依赖一个新对象,就需要把从该对象第一次出现到该函数调用的所有的该对象调用的函数构造出来,这样才能保证该对象在该函数执行时的可用性和正确性。而在这一段执行序列中,该对象调用的函数有可能会依赖更多新的对象,又将重复上述过程,直至没有新对象依赖为止。整个过程产生了一个依赖关系树,从图8所示的目标函数依赖关系树可以看出,构造目标函数的调用可能涉及非常多的新对象及这些新对象的函数调用,这体现了运行时栈模型中数据依赖的复杂性。再者,在运行时栈模型中,有一部分对象是调用构造函数或者作为某个函数的返回值产生的,但还有一部分对象第一次出现就作为函数的参数或者调用者出现,对于这些对象,需要在运行时堆模型中获取。在运行时堆模型中获取对象,需要根据对象的引用信息,不断地寻找引用了对象的对象,直至寻找到一个静态对象。这一过程称为寻找对象引用链,对象引用链如图9所示,图中实线所连接的就是成功寻找到静态变量的引用链,虚线表示在路径中并未成功找到静态变量。找到静态变量后,有些静态变量的类加载器可能与应用类加载器(安卓应用最基础的类加载器)不一致,此时我们需要进一步去构造该静态变量的类加载器。这些过程体现出运行时堆模型中也存在着复杂的数据依赖。执行序列复杂和数据依赖复杂将导致根据行为反射运行时模型将安卓应用微服务化的学习成本非常高,开发过程也非常艰难与耗时。
技术实现思路
本专利技术主要目的在于,提供一种基于反射的安卓应用微服务化方法及系统,以解决现有的将安卓应用微服务化的方式所遇到的执行序列复杂和数据依赖复杂的问题。本专利技术是通过如下技术方案实现的:一种基于反射的安卓应用微服务化方法,包括如下步骤:步骤S1:在安卓应用运行时,对所述安卓应用的运行进行监控,得到所述安卓应用的行为反射运行时模型,然后跳转至步骤S2;所述行为反射运行时模型包括运行时栈模型和运行时堆模型;步骤S2:标注所述运行时栈模型中包含目标数据的目标对象,然后跳转至步骤S3;步骤S3:生成所述目标对象的所有函数调用集,然后跳转至步骤S4;步骤S4:分析使用每一函数调用集生成函数调用代码的难度,并据此为每一函数调用集进行评分,然后跳转到步骤S5;步骤S5:判断被选择的函数调用集是否依赖新对象,当所述被选择的函数调用集依赖新对象时,跳转至步骤S2,并将依赖的新对象作为所述目标对象,否则跳转至步骤S6,所述被选择的函数调用集为根据各函数调用集的评分从所述所有函数调用集中选择的;步骤S6:将各次选择的函数调用集按序组成函数调用序列,并使用所述函数调用序列生成可执行的函数调用代码;步骤S7:对于无法在所述运行时栈模型中生成的目标对象,在所述运行时堆模型中,根据目标对象间的引用信息生成所述目标对象的所有引用链;步骤S8:判断被选择的目标对象引用链开头的静态对象的类加载器是否与应用类加载器一致,如果不一致,则将所述类加载器作为新的目标对象返回执行步骤S7,如果一致则执行步骤S9;步骤S9:根据被选择的目标对象引用链生成目标对象构造代码;步骤S10:将所述函数调用代码和目标对象构造代码包装成微服务接口。进一步地,所述步骤S4中,分析使用函数调用集生成函数调用代码的难度,并据此为该函数调用集进行评分的步骤包括:统计该函数调用集中函数调用的数目A;统计该函数调用集所依赖的新对象的数目B;统计该函数调用集所依赖的所有新对象的总相关函数调用的数目C;统计该函数调用集中无法在运行时栈模型中构造的新对象数目D;根据数目A、数目B、数目C及数目D各自的预设权重,将数目A、数目B、数目C及数目D进行加权求和,得到该函数调用集的评分。进一步地,所述步骤S3中,生成所述目标对象的所有函数调用集包括如下步骤:查找所述目标对象从第一次出现到包含所述目标数据的过程中所有调用的函数以及所有以所述目标对象为参数的函数;依据运行时栈模型提供的函数调用栈信息,将查找到的函数划分成调用栈层次不完全相同但最后执行逻辑相同的多个函数调用集。进一步地,所述步骤S7包括:步骤S7A:从目标对象开始,遍历引用了该目标对象的对象,并判断引用了该目标对象的对象的类型,所述类型包括基础数据类型对象、普通堆对象、类对象、数组对象和引用对象;步骤S7B:如果当前遍历到的对象不是一个类对象,则继续以此对象为新的目标对象进行下一轮遍历,如果当前遍历到的对象是一个类对象,查找该对象的一个静态成员变量,并根据所述静态成员变量与目标对象间的引用关系,得到目标对象的一条引用链;步骤S7C:重复步骤S7A和步骤S7B,直到得到所有以目标对象结尾,以所述静态成员变量开头的引用链。进一步地,执行所述步骤S7B时,实时记录当前引用链中已经使用的对象,如果遍历过程中遇到了已经使用过的对象,则跳过该对象。一种基于反射的安卓应用微服务化系统,包括:网构软件行为反射技术框架、目标对象标注模块、函数调用集生成模块、函数调用集评分模块、判断模块、函数调用代码生成模块、目标对象引用链生成模块、类加载器构造模块、目标对象构造代码生成模块和微服务化接口包装模块;所述网构软件行为反射技术框架,用于在安卓应用运行时,对所述安卓应用的运行进行监控,得到所述安卓应用的行为反射运行时模型,所述行为反射运行时模型包括运行时栈模型和运行时堆模型;所述目标对象标注模块,用于标注所述运行时栈模型中包含目标数据的目标对象;所述本文档来自技高网
...

【技术保护点】
1.一种基于反射的安卓应用微服务化方法,其特征在于,包括如下步骤:步骤S1:在安卓应用运行时,对所述安卓应用的运行进行监控,得到所述安卓应用的行为反射运行时模型,然后跳转至步骤S2;所述行为反射运行时模型包括运行时栈模型和运行时堆模型;步骤S2:标注所述运行时栈模型中包含目标数据的目标对象,然后跳转至步骤S3;步骤S3:生成所述目标对象的所有函数调用集,然后跳转至步骤S4;步骤S4:分析使用每一函数调用集生成函数调用代码的难度,并据此为每一函数调用集进行评分,然后跳转到步骤S5;步骤S5:判断被选择的函数调用集是否依赖新对象,当所述被选择的函数调用集依赖新对象时,跳转至步骤S2,并将依赖的新对象作为所述目标对象,否则跳转至步骤S6,所述被选择的函数调用集为根据各函数调用集的评分从所述所有函数调用集中选择的;步骤S6:将各次选择的函数调用集按序组成函数调用序列,并使用所述函数调用序列生成可执行的函数调用代码;步骤S7:对于无法在所述运行时栈模型中生成的目标对象,在所述运行时堆模型中,根据目标对象间的引用信息生成所述目标对象的所有引用链;步骤S8:判断被选择的目标对象引用链开头的静态对象的类加载器是否与应用类加载器一致,如果不一致,则将所述类加载器作为新的目标对象返回执行步骤S7,如果一致则执行步骤S9;步骤S9:根据被选择的目标对象引用链生成目标对象构造代码;步骤S10:将所述函数调用代码和目标对象构造代码包装成微服务接口。...

【技术特征摘要】
2018.06.22 CN 20181065409951.一种基于反射的安卓应用微服务化方法,其特征在于,包括如下步骤:步骤S1:在安卓应用运行时,对所述安卓应用的运行进行监控,得到所述安卓应用的行为反射运行时模型,然后跳转至步骤S2;所述行为反射运行时模型包括运行时栈模型和运行时堆模型;步骤S2:标注所述运行时栈模型中包含目标数据的目标对象,然后跳转至步骤S3;步骤S3:生成所述目标对象的所有函数调用集,然后跳转至步骤S4;步骤S4:分析使用每一函数调用集生成函数调用代码的难度,并据此为每一函数调用集进行评分,然后跳转到步骤S5;步骤S5:判断被选择的函数调用集是否依赖新对象,当所述被选择的函数调用集依赖新对象时,跳转至步骤S2,并将依赖的新对象作为所述目标对象,否则跳转至步骤S6,所述被选择的函数调用集为根据各函数调用集的评分从所述所有函数调用集中选择的;步骤S6:将各次选择的函数调用集按序组成函数调用序列,并使用所述函数调用序列生成可执行的函数调用代码;步骤S7:对于无法在所述运行时栈模型中生成的目标对象,在所述运行时堆模型中,根据目标对象间的引用信息生成所述目标对象的所有引用链;步骤S8:判断被选择的目标对象引用链开头的静态对象的类加载器是否与应用类加载器一致,如果不一致,则将所述类加载器作为新的目标对象返回执行步骤S7,如果一致则执行步骤S9;步骤S9:根据被选择的目标对象引用链生成目标对象构造代码;步骤S10:将所述函数调用代码和目标对象构造代码包装成微服务接口。2.如权利要求1所述的基于反射的安卓应用微服务化方法,其特征在于,所述步骤S4中,分析使用函数调用集生成函数调用代码的难度,并据此为该函数调用集进行评分的步骤包括:统计该函数调用集中函数调用的数目A;统计该函数调用集所依赖的新对象的数目B;统计该函数调用集所依赖的所有新对象的总相关函数调用的数目C;统计该函数调用集中无法在运行时栈模型中构造的新对象数目D;根据数目A、数目B、数目C及数目D各自的预设权重,将数目A、数目B、数目C及数目D进行加权求和,得到该函数调用集的评分。3.如权利要求1所述的基于反射的安卓应用微服务化方法,其特征在于,所述步骤S3中,生成所述目标对象的所有函数调用集包括如下步骤:查找所述目标对象从第一次出现到包含所述目标数据的过程中所有调用的函数以及所有以所述目标对象为参数的函数;依据运行时栈模型提供的函数调用栈信息,将查找到的函数划分成调用栈层次不完全相同但最后执行逻辑相同的多个函数调用集。4.如权利要求1所述的基于反射的安卓应用微服务化方法,其特征在于,所述步骤S7包括:步骤S7A:从目标对象开始,遍历引用了该目标对象的对象,并判断引用了该目标对象的对象的类型,所述类型包括基础数据类型对象、普通堆对象、类对象、数组对象和引用对象;步骤S7B:如果当前遍历到的对象不是一个类对象,则继续以此对象为新的目标对象进行下一轮遍历,如果当前遍历到的对象是一个类对象,查找该对象的一个静态成员变量,并根据所述静态成员变量与目标对象间的引用关系,得到目标对象的一条引用链;步骤S7C:重复步骤S7A和步骤S7B,直到得到所有以目标对象结尾,以所述静态成员变量开头的引用链。5.如权利要求4所述的基于反射的安卓应用微服务化方法,其特征在于,执行所述步骤S7B时,实时记录当前引用链中已经使用的对象,如果遍历过程中遇到了已经使用过的对象,则跳过该对象。6.一种基于反射的安卓应用微服务化系统,其特征在于,包括:网构软件行为...

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

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

1