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,简称反射)机制,该机制能够实现对软件运行态的监测与控制。基于计算反射机制,能够有效解决安卓应用的微服务化问题。基于计算反射机制,通过监测应用运行时安卓系统的各种信息,生成安卓应用运行时的行为描述,对这些行为描述按需处理并生成应用控制逻辑,最终实现安卓应用的微服务化。然而,安卓应用的功能实现通常是非常复杂的,应用自身的包和所依赖的包一般数目巨大,这意味着实现功能的代码所依赖的函数数目可能很多,调用栈深度很深。行为反射技术框架所记录的执行序列是应用运行时除系统调用外的所有函数调用,所以执行序列的条目通常非常巨大,函数调用栈很深。这是执行序列复杂性的一方面体现。另一方面,由于执行序列中某一函数的构造可能存在多种方式,因此对于目标功能与数据可能存在多个运行时栈模型切片,每个切片对应一种微服务开发方法。每个切片可能是单线程也可能是多线程结构,不同结构的微服务开发方法也不 ...
【技术保护点】
1.一种基于反射的安卓应用微服务化方法,其特征在于,包括如下步骤:步骤S1:在安卓应用运行时,对所述安卓应用的运行进行监控,得到所述安卓应用的行为反射运行时模型,然后跳转至步骤S2;所述行为反射运行时模型包括运行时栈模型和运行时堆模型;步骤S2:标注所述运行时栈模型中包含目标数据的目标对象,然后跳转至步骤S3;步骤S3:生成所述目标对象的所有函数调用集,然后跳转至步骤S4;步骤S4:分析使用每一函数调用集生成函数调用代码的难度,并据此为每一函数调用集进行评分,然后跳转到步骤S5;步骤S5:判断被选择的函数调用集是否依赖新对象,当所述被选择的函数调用集依赖新对象时,跳转至步骤S2,并将依赖的新对象作为所述目标对象,否则跳转至步骤S6,所述被选择的函数调用集为根据各函数调用集的评分从所述所有函数调用集中选择的;步骤S6:将各次选择的函数调用集按序组成函数调用序列,并使用所述函数调用序列生成可执行的函数调用代码;步骤S7:对于无法在所述运行时栈模型中生成的目标对象,在所述运行时堆模型中,根据目标对象间的引用信息生成所述目标对象的所有引用链;步骤S8:判断被选择的目标对象引用链开头的静态对象的 ...
【技术特征摘要】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。