1.本技术涉及计算机技术领域,尤其涉及一种字节码修改方法及装置。
背景技术:2.字节码修改,一般是指在源代码编译成字节码(class)后,在android生成dex文件之前,将一段代码插入或者替换原本的代码的技术。应用该技术的目的在于修改class(类)文件,以修改或者增强原有代码的逻辑。该技术常用在热修复、插件化、第三方jar文件的bug修复、性能监控等领域。
3.目前,常使用编译器进行字节码修改。但是,这种修改方式需要大量的手动操作,修改效率低下。
技术实现要素:4.本技术实施例提供一种字节码修改方法及装置,以提高字节码修改效率。
5.第一方面,本技术实施例提供一种字节码修改方法,包括:
6.获取添加有注解的目标代码并进行编译,得到包含注解的多个类文件,其中,所述注解的注解内容包括修改任务类型和待修改的字节码信息;
7.对所述多个类文件中的注解进行解析,确定所述多个类文件中的注解的添加位置信息和注解内容,并基于所述多个类文件中的注解的添加位置信息和注解内容生成字节码修改任务配置文件;
8.基于所述字节码修改任务配置文件生成多个字节码修改任务;
9.遍历所述多个类文件并对当前类文件执行第一指定步骤,其中,所述第一指定步骤包括:将当前类文件分别与所述多个字节码修改任务进行匹配,确定是否存在与当前类文件匹配的目标字节码修改任务,若存在,则执行所述目标字节码修改任务,以对当前类文件进行字节码修改。
10.第二方面,本技术实施例还提供一种字节码修改装置,包括:
11.编译模块,用于获取添加有注解的目标代码并进行编译,得到包含注解的多个类文件,其中,所述注解的注解内容包括修改任务类型和待修改的字节码信息;
12.注解解析模块,用于对所述多个类文件中的注解进行解析,确定所述多个类文件中的注解的添加位置信息和注解内容,并基于所述多个类文件中的注解的添加位置信息和注解内容生成字节码修改任务配置文件;
13.任务生成模块,用于基于所述字节码修改任务配置文件生成多个字节码修改任务;
14.任务执行模块,用于遍历所述多个类文件并对当前类文件执行第一指定步骤,其中,所述第一指定步骤包括:将当前类文件分别与所述多个字节码修改任务进行匹配,确定是否存在与所述当前类文件匹配的目标字节码修改任务,若存在,则执行所述目标字节码修改任务,以对所述当前类文件进行字节码修改。
15.第三方面,本技术实施例还提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如第一方面所述的方法的步骤。
16.第四方面,本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面所述的方法的步骤。
17.本技术实施例采用的上述至少一个技术方案,可以基于目标代码中的注解,在编译得到该目标代码的多个类文件之后,自动解析其中的注解生成字节码修改任务,并自动执行字节码修改任务完成字节码修改,整个过程自动化程度高,因此可以简化字节码修改过程,提高字节码修改效率,降低目标代码对应的应用的开发门槛。
附图说明
18.此处所说明的附图用来提供对本技术的进一步理解,构成本技术的一部分,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
19.图1是本技术实施例提供的一种字节码修改方案的原理示意图。
20.图2是本技术实施例提供的一种字节码修改方法的流程示意图。
21.图3是本技术实施例提供的一种字节码修改装置的结构示意图。
22.图4是本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
23.为使本技术的目的、技术方案和优点更加清楚,下面将结合本技术具体实施例及相应的附图对本技术技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
24.一个客户端往往包含大量的依赖库,该客户端常常还有多个版本,每个版本可能有多个团队向客户端集成大量的代码,而且这些代码都是难以直接溯源到源码的,这些情况对客户端的开发和维护形成很大的挑战。比如在收集线上日志信息时,需要把客户端中所有调用系统log.i方法的地方,替换成自己封装的xlog.i方法(该方法具备系统log同样的功能,能将日志信息写入到文件中,并在系统发生崩溃时上传到服务器)。对于这样的需求,如果使用编译器进行修改,需要花费巨大的工作量,修改效率低下,且对jar文件无能为力。
25.为了解决上述问题,本技术实施例提出了一种基于代码注解形式的自动化字节码修改方案。如图1所示,该字节码修改方案可包括三个环节:注解添加环节11、注解解析环节12和任务执行环节13,其中,注解添加环节11一般发生在目标代码的开发时期,注解解析环节12和任务执行环节13发生在客户端构建系统构建所述目标代码对应的客户端的时期,目标代码可以是任一版本的任一客户端(或者说某一应用)的代码,下面具体说明各环节所实现的内容。
26.在注解添加环节11,可由开发人员在目标代码中声明注解,具体可以在类中的方法上添加注解,注解内容可以包括待修改的类名称、待修改的方法名称和待修改的方法的
描述信息等;添加注解后,可对添加注解的目标代码进行编译生成产物21:含有注解的多个类文件。
27.在注解解析环节12,可对含有注解的多个类文件中的注解进行解析,获得这多类文件中的注解的添加位置信息和注解内容,并基于这些信息生成产物22:字节码修改配置文件。
28.在任务执行环节13,可基于字节码修改配置文件生成字节码修改任务,并在回调处理类文件时,将类文件与字节码修改任务进行匹配,若匹配上则对该类文件进行字节码修改,否则跳过对该类文件的修改,最后得到产物23:修改后的类文件。
29.注解,可以看作是对一个类/方法的一个扩展的模版,每个类/方法按照注解类中的规则,来为类/方法注解不同的参数,在用到的地方可以得到不同的类/方法中注解的各种参数与值。注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
30.在上述技术构思的基础上,本技术实施例提供了一种字节码修改方法和装置,该方法和装置可由电子设备,或者可由安装在电子设备中的软件执行,这里的电子设备可以包括终端和服务器。
31.需要说明的是,本技术实施例提供的一种字节码修改方法和装置可自动接入sdk(software development kit,软件开发工具包)。
32.下面先对本技术实施例提供的一种字节码修改方法进行说明。
33.如图2所示,本技术实施例提供的一种字节码修改方法,可以包括:
34.步骤201、获取添加有注解的目标代码并进行编译,得到包含注解的多个类文件,其中,所述注解的注解内容包括修改任务类型和待修改的字节码信息。
35.如前文所述,目标代码中的注解可由开发人员在代码开发环节添加,一般添加在类(class)中的方法上,目标代码可以是任一版本的任一客户端(或者说某一应用)的代码,类文件即class文件。
36.修改任务类型是指对类文件进行修改的任务类型,或者说是字节码修改任务的类型,修改任务类型可以预先设定,举例来说,修改任务类型可以包括但不限于替换方法(method)调用、修改方法实现和给方法添加异常捕捉(try catch)等类型中的一种或多种。
37.待修改的字节码信息可包括但不限于待修改的类名称、待修改的方法名称、待修改的方法描述信息和待修改的方法是否是静态等信息中的至少一种。
38.在向目标代码添加注解时,可通过如下步骤实现:
39.首先,响应于开发者的java库工程创建请求,通过编译器创建一个java库工程。
40.然后,响应于开发者的注解创建请求,在目标代码中创建注解,并在注解中声明修改任务类型和待修改的字节码信息,例如创建方法保护任务注解,伪代码如表1所示。
41.表1
[0042][0043]
最后,可基于开发者的发布请求,将添加完注解的目标代码打包发布至预设仓库,如maven仓库,供后续调用,如供应用开发依赖调用。
[0044]
步骤202、对所述多个类文件中的注解进行解析,确定所述多个类文件中的注解的添加位置信息和注解内容,并基于所述多个类文件中的注解的添加位置信息和注解内容生成字节码修改任务配置文件。
[0045]
类文件中的注解的添加位置信息可包括:注解所在的类名称、注解所在的方法名称和注解所在的方法的描述信息等。
[0046]
如前文所述,注解内容可包括修改任务类型和待修改的字节码信息,其中,待修改的字节码信息可包括但不限于待修改的类名称、待修改的方法名称、待修改的方法描述信息和待修改的方法是否是静态等。
[0047]
具体的,步骤202可包括如下步骤:首先,创建一个java库工程;其次,创建注解解析器,分别解析多个类文件中的注解,获得这多个类文件中的注解的添加位置信息和注解内容;然后,将获取的这多个类文件中的注解的添加位置信息和注解内容写入字节码修改任务配置文件中,例如,如表2所示,生成字节码修改任务配置文件app/roboasmconfiggen.xml。最后,将字节码修改任务配置文件打包发不到预设仓库,如maven仓库,供应用开发依赖调用。
[0048]
表2
[0049][0050]
步骤203、基于所述字节码修改任务配置文件生成多个字节码修改任务。
[0051]
由于多个类文件中通常可能包含多条注解,因此,基于上述多个类文件中的注解的添加位置信息和注解内容生成的字节码修改任务配置文件中对应包含多条字节码修改任务信息,一般来说,一条注解对应一项字节码修改任务信息,一条字节码修改任务信息包括修改任务类型和修改任务的目标参数,其中,修改任务的目标参数是根据相应注解的添加位置信息和注解内容确定的,例如,目标参数可包括修改任务类型、待修改的类名称、待修改的方法名称和待修改的方法描述信息,以及依据注解的添加位置信息确定的其他参数等。
[0052]
进而,作为一个例子,步骤203可包括:先基于上述字节码修改任务配置文件,生成多条字节码修改任务信息,然后基于这多条字节码修改任务信息生成针对所述多个类文件的多个字节码修改任务,其中,一条字节码修改任务信息对应一个字节码修改任务。
[0053]
此外,作为另一个例子,步骤203可包括:基于至少一个字节码修改任务模版和所述字节码修改任务配置文件,生成针对所述多个类文件的多个字节码修改任务。具体的,可先基于所述字节码修改任务配置文件生成多条字节码修改任务信息,其中,所述多个类文件中的一条注解对应一条字节码修改任务信息;获取所述多条字节码修改任务信息对应的至少一个字节码修改任务模版;将所述多条字节码任务信息分别对应填充至相应的字节码修改任务模版中,以生成针对所述多个类文件的多个字节码修改任务,其中,一个字节码修改任务信息对应一项字节码修改任务。
[0054]
可以理解,预先创建字节码修改任务模板,并将字节码修改任务信息填充至对应的节码修改任务模板以生成字节码修改任务,可以简化字节码任务生成的过程,从而降低字节码修改的技术门槛,不用关心字节码修改任务生成的细节,最终提升字节码修改效率。
[0055]
通常,一种类型的字节码修改任务,对应创建一个字节码修改任务模版。
[0056]
步骤204、遍历所述多个类文件并对当前类文件执行第一指定步骤,其中,所述第一指定步骤包括:将当前类文件分别与所述多个字节码修改任务进行匹配,确定是否存在与当前类文件匹配的目标字节码修改任务,若存在,则执行所述目标字节码修改任务,以对当前类文件进行字节码修改。
[0057]
将目标代码编译生成的多个类文件一一与步骤203生成的多个字节码修改任务进行匹配,确定是否存在与之匹配的目标字节码修改任务,若存在,在执行目标字节码修改任务,以对当前类文件进行字节码修改。
[0058]
具体的,当遍历到某一类文件时,可预读当前类文件的字符串池信息,然后将当前类文件的字符串池信息分别与所述多个字节码任务中的目标参数进行比对,确定是否存在与所述当前类文件匹配的目标字节码修改任务。
[0059]
可选地,若上述多个字节码修改任务中,不存在与当前类文件匹配的目标字节码修改任务,则跳过当前类文件并对所述多个类文件中的下一类文件执行所述第一指定步骤,直到对所述多个类文件的遍历结束。
[0060]
更为具体的,将当前类文件的字符串池信息分别与所述多个字节码修改任务中的目标参数进行比对,确定是否存在与所述当前类文件匹配的目标字节码修改任务,可包括:遍历所述多个字节码修改任务并对当前字节码修改任务执行第二指定步骤。其中,所述第二指定步骤包括:确定当前类文件的字符串池信息中的目标参数与当前字节码修改任务中的目标参数是否一致;若一致,则将当前字节码修改任务确定为与所述目标字节码修改任
务;若不一致,则将所述多个字节码修改任务中的下一字节码修改任务作为当前字节码修改任务,直到对所述多个字节码修改任务的遍历结束。
[0061]
可选地,在执行步骤204前,可创建一个创建transfrom任务,然后,在执行所述目标字节码修改任务,以对所述当前类文件进行字节码修改时,可通过transfrom任务执行所述目标字节码修改任务,以对所述当前类文件进行字节码修改,最终通过该transfrom任务完成对上述多个类文件的字节码修改。
[0062]
可以理解,通过一个transform任务处理多个字节码修改任务,通过预读匹配(预读类文件的字符串池与字节码修改任务中的信息进行比对),以处理指定的类文件,可大大减少目标代码对应的客户端的构建时间。
[0063]
下面通过一个例子对上述步骤203和步骤204的具体实现过程进行说明:
[0064]
首先,创建一个android gradle plugin库工程。
[0065]
其次,创建一个transfrom任务,该任务会在客户端构建系统构建客户端时回调触发处理各class文件。
[0066]
再次,读取字节码修改任务配置文件中的信息,生成多条字节码修改任务信息。
[0067]
然后,读取一个或多个预先创建的字节码修改任务模版,将所述多条字节码修改任务信息填充至相应的字节码修改任务模版中,生成多个字节码修改任务。
[0068]
最后,在客户端构建系统回调上述多个类文件时,预读上述多个类文件的字符串池信息,然后将这多个类文件的字符串池信息分别与上述多个字节码修改任务进行一一比对,当某一类文件的字符串池信息与某一字节码修改任务匹配时,执行该字节码修改任务,否则跳过当前类文件或跳过当前字节码修改任务,继续进行下一比对。
[0069]
其中,执行字节码修改任务包括:根据字节码修改任务的目标参数,通过asm(java的一个字节码操控框架)进行字节码修改,效果如表3所示。
[0070]
表3
[0071]
[0072]
可选地,还可以将修改后的多个类文件打包发布到预设仓库,如maven仓库,供应用开发依赖调用。
[0073]
本技术实施例提供的一种字节码修改方法,可以基于目标代码中的注解,在编译得到该目标代码的多个类文件之后,自动解析其中的注解生成字节码修改任务,并自动执行字节码修改任务完成字节码修改,整个过程自动化程度高,因此可以简化字节码修改过程,提高字节码修改效率,降低目标代码对应的应用的开发门槛。
[0074]
可选地,执行本技术实施例提供的字节码修改方法前,还可以通过编译器创建目标代码对应的app(application,应用程序)项目,添加注解依赖,添加注解解析依赖,以及添加任务执行plugin库依赖,从而为本技术实施例提供的方法的执行做好准备。
[0075]
简单来讲,如多想要对目标代码编译后的类文件进行字节码修改,可先在开发目标代码时添加注解,例如,如表4所示,可在类c中添加关于类a的注解;然后,针对目标代码执行本技术实施例提供的字节码修改方法,以在通过编译器执行打包的目标代码构建app生成apk时,自动对注解进行解析,自动生成字节码修改任务,并自动执行字节码修改任务完字节码修改,其效果通过对比表5和表6即可看出,其中,表5列出了执行本技术实施例提供的字节码修改方法前的类a的类文件,表6列出了执行本技术实施例提供的字节码修改方法后的类a的类文件。
[0076]
表4
[0077][0078]
表5
[0079][0080]
表6
[0081][0082]
上面介绍了本技术实施例提供的一种字节码修改方法,相应于上述方法实施例,本技术实施例还提供了一种字节码修改装置,下面进行介绍。
[0083]
如图3所示,本技术实施例提供的一种字节码修改装300,装置300可以包括:编译模块301、注解解析模块302、任务生成模块303和任务执行模块304。
[0084]
编译模块301,用于获取添加有注解的目标代码并进行编译,得到包含注解的多个类文件,其中,所述注解的注解内容包括修改任务类型和待修改的字节码信息。
[0085]
注解解析模块302,用于对所述多个类文件中的注解进行解析,确定所述多个类文件中的注解的添加位置信息和注解内容,并基于所述多个类文件中的注解的添加位置信息和注解内容生成字节码修改任务配置文件。
[0086]
类文件中的注解的添加位置信息可包括:注解所在的类名称、注解所在的方法名称和注解所在的方法的描述信息等。
[0087]
注解内容可包括修改任务类型和待修改的字节码信息,其中,待修改的字节码信息可包括但不限于待修改的类名称、待修改的方法名称、待修改的方法描述信息和待修改的方法是否是静态等。
[0088]
具体的,注解解析模块302可用于:分别解析多个类文件中的注解,获得这多个类文件中的注解的添加位置信息和注解内容;然后,将获取的这多个类文件中的注解的添加位置信息和注解内容写入字节码修改任务配置文件中。
[0089]
任务生成模块303,用于基于所述字节码修改任务配置文件生成多个字节码修改任务。
[0090]
作为一个例子,任务生成模块303可用于:先基于上述字节码修改任务配置文件,生成多条字节码修改任务信息,然后基于这多条字节码修改任务信息生成针对所述多个类文件的多个字节码修改任务,其中,一条字节码修改任务信息对应一个字节码修改任务。
[0091]
此外,作为另一个例子,任务生成模块303可用于:基于至少一个字节码修改任务模版和所述字节码修改任务配置文件,生成针对所述多个类文件的多个字节码修改任务。具体的,可先基于所述字节码修改任务配置文件生成多条字节码修改任务信息,其中,所述多个类文件中的一条注解对应一条字节码修改任务信息;获取所述多条字节码修改任务信息对应的至少一个字节码修改任务模版;将所述多条字节码任务信息分别对应填充至相应的字节码修改任务模版中,以生成针对所述多个类文件的多个字节码修改任务,其中,一个
字节码修改任务信息对应一项字节码修改任务。
[0092]
可以理解,预先创建字节码修改任务模板,并将字节码修改任务信息填充至对应的节码修改任务模板以生成字节码修改任务,可以简化字节码任务生成的过程,从而降低字节码修改的技术门槛,不用关心字节码修改任务生成的细节,最终提升字节码修改效率。
[0093]
通常,一种类型的字节码修改任务,对应创建一个字节码修改任务模版。
[0094]
任务执行模块304,用于遍历所述多个类文件并对当前类文件执行第一指定步骤,其中,所述第一指定步骤包括:将当前类文件分别与所述多个字节码修改任务进行匹配,确定是否存在与所述当前类文件匹配的目标字节码修改任务,若存在,则执行所述目标字节码修改任务,以对所述当前类文件进行字节码修改。
[0095]
将目标代码编译生成的多个类文件一一与步骤203生成的多个字节码修改任务进行匹配,确定是否存在与之匹配的目标字节码修改任务,若存在,在执行目标字节码修改任务,以对当前类文件进行字节码修改。
[0096]
具体的,当遍历到某一类文件时,可预读当前类文件的字符串池信息,然后将当前类文件的字符串池信息分别与所述多个字节码任务中的目标参数进行比对,确定是否存在与所述当前类文件匹配的目标字节码修改任务。
[0097]
更为具体的,将当前类文件的字符串池信息分别与所述多个字节码修改任务中的目标参数进行比对,确定是否存在与所述当前类文件匹配的目标字节码修改任务,可包括:遍历所述多个字节码修改任务并对当前字节码修改任务执行第二指定步骤。其中,所述第二指定步骤包括:确定当前类文件的字符串池信息中的目标参数与当前字节码修改任务中的目标参数是否一致;若一致,则将当前字节码修改任务确定为与所述目标字节码修改任务;若不一致,则将所述多个字节码修改任务中的下一字节码修改任务作为当前字节码修改任务,直到对所述多个字节码修改任务的遍历结束。
[0098]
可选地,图3所示的装置还可以包括:任务创建模块,用于在遍历所述多个类文件并对当前类文件执行第一指定步骤前,创建一个创建transfrom任务,然后,在执行所述目标字节码修改任务,以对所述当前类文件进行字节码修改时,可通过transfrom任务执行所述目标字节码修改任务,以对所述当前类文件进行字节码修改,最终通过该transfrom任务完成对上述多个类文件的字节码修改。
[0099]
可以理解,通过一个transform任务处理多个字节码修改任务,通过预读匹配(预读类文件的字符串池与字节码修改任务中的信息进行比对),以处理指定的类文件,可大大减少目标代码对应的客户端的构建时间。
[0100]
本技术实施例提供的一种字节码修改装置,可以基于目标代码中的注解,在编译得到该目标代码的多个类文件之后,自动解析其中的注解生成字节码修改任务,并自动执行字节码修改任务完成字节码修改,整个过程自动化程度高,因此可以简化字节码修改过程,提高字节码修改效率,降低目标代码对应的应用的开发门槛。
[0101]
需要说明的是,由于装置实施例执行的内容与方法实施例类似,因此,本文对装置实施例部分描述的较为简略,相关之处请参见方法实施例部分。
[0102]
图4示出了是本技术实施例提供的一种电子设备的结构示意图。请参考图4,在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(random
‑
access memory,ram),也可能还包括非
易失性存储器(non
‑
volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
[0103]
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是isa(industry standard architecture,工业标准体系结构)总线、pci(peripheral component interconnect,外设部件互连标准)总线或eisa(extended industry standard architecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图4中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
[0104]
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
[0105]
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成字节码修改装置。处理器,执行存储器所存放的程序,并具体用于执行本技术实施例提供的字节码修改方法。
[0106]
上述如本技术图3所示实施例揭示的字节码修改装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本技术实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
[0107]
本技术实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的电子设备执行时,能够使该电子设备执行图3所示实施例中字节码修改装置执行的方法,并具体用于执行本技术实施例提供的字节码修改方法。
[0108]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd
‑
rom、光学存储器等)上实施的计算机程序产品的形式。
[0109]
本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序
指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0110]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0111]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0112]
需要说明的是,本技术中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0113]
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
[0114]
以上仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。