发明内容
本公开实施例至少提供一种安装包生成方法及装置。
第一方面,本公开实施例提供了一种安装包生成方法,包括:
获取目标应用的待编译文件,以及所述待编译文件对应的资源索引文件;
对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件;
基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件;
基于所述第一可执行文件以及所述第二可执行文件,生成所述目标应用对应的安装包文件。
一种可选的实施方式中,所述对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件,包括:
对所述资源索引文件进行编译,得到由字节码编写的所述第一字节码文件;
对所述第一字节码文件进行编译,得到由二进制数字编写的第一可执行文件。
一种可选的实施方式中,所述基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件,包括:
基于所述第一字节码文件中指示的资源索引信息,将所述待编译文件编译为第二字节码文件;
对所述第二字节码文件进行形式变换处理,得到与所述待编译文件匹配的第三字节码文件;
将所述第三字节码文件编译为所述第二可执行文件。
一种可选的实施方式中,所述基于所述第一字节码文件中指示的资源索引信息,将所述待编译文件编译为第二字节码文件,包括:
读取所述待编译文件中的注解信息,并基于所述注解信息生成目标代码;
基于所述第一字节码文件中指示的资源索引信息,对所述目标代码及所述待编译文件进行编译,得到所述第二字节码文件。
一种可选的实施方式中,所述方法还包括:
响应于针对所述资源索引文件的第一编辑指令,基于所述第一编辑指令对所述资源索引文件进行更新;
对更新后的资源索引文件进行编译,得到与所述更新后的资源索引文件匹配的第三可执行文件;
基于所述第三可执行文件及所述第二可执行文件,生成所述目标应用在更新资源索引文件后的安装包文件。
一种可选的实施方式中,所述方法还包括:
响应于针对所述待编译文件的第二编辑指令,基于所述第二编辑指令对所述待编译文件进行更新;
基于所述第一字节码文件,对更新后的待编译文件进行编译,得到与所述更新后的待编译文件匹配的第四可执行文件;
基于所述第一可执行文件及所述第四可执行文件,生成所述目标应用在更新资源索引文件后的安装包文件。
一种可选的实施方式中,获取所述待编译文件对应的资源索引文件,包括:
获取所述目标应用的资源数据,并将所述资源数据打包为资源文件;
基于各个资源数据在所述资源文件中的位置信息,生成所述资源索引信息。
第二方面,本公开实施例还提供一种安装包生成装置,包括:
获取模块,用于获取目标应用的待编译文件,以及所述待编译文件对应的资源索引文件;
第一编译模块,用于对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件;
第二编译模块,用于基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件;
生成模块,用于基于所述第一可执行文件以及所述第二可执行文件,生成所述目标应用对应的安装包文件。
一种可选的实施方式中,所述第一编译模块在对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件时,用于:
对所述资源索引文件进行编译,得到由字节码编写的所述第一字节码文件;
对所述第一字节码文件进行编译,得到由二进制数字编写的第一可执行文件。
一种可选的实施方式中,所述第二编译模块在基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件时,用于:
基于所述第一字节码文件中指示的资源索引信息,将所述待编译文件编译为第二字节码文件;
对所述第二字节码文件进行形式变换处理,得到与所述待编译文件匹配的第三字节码文件;
将所述第三字节码文件编译为所述第二可执行文件。
一种可选的实施方式中,所述第二编译模块在基于所述第一字节码文件中指示的资源索引信息,将所述待编译文件编译为第二字节码文件时,用于:
读取所述待编译文件中的注解信息,并基于所述注解信息生成目标代码;
基于所述第一字节码文件中指示的资源索引信息,对所述目标代码及所述待编译文件进行编译,得到所述第二字节码文件。
一种可选的实施方式中,所述装置还包括更新模块,用于:
响应于针对所述资源索引文件的第一编辑指令,基于所述第一编辑指令对所述资源索引文件进行更新;
对更新后的资源索引文件进行编译,得到与所述更新后的资源索引文件匹配的第三可执行文件;
基于所述第三可执行文件及所述第二可执行文件,生成所述目标应用在更新资源索引文件后的安装包文件。
一种可选的实施方式中,所述更新模块还用于:
响应于针对所述待编译文件的第二编辑指令,基于所述第二编辑指令对所述待编译文件进行更新;
基于所述第一字节码文件,对更新后的待编译文件进行编译,得到与所述更新后的待编译文件匹配的第四可执行文件;
基于所述第一可执行文件及所述第四可执行文件,生成所述目标应用在更新资源索引文件后的安装包文件。
一种可选的实施方式中,所述获取模块在获取所述待编译文件对应的资源索引文件时,用于:
获取所述目标应用的资源数据,并将所述资源数据打包为资源文件;
基于各个资源数据在所述资源文件中的位置信息,生成所述资源索引信息。
第三方面,本公开实施例还提供一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
本公开实施例提供的安装包生成方法及装置,首先获取目标应用的待编译文件,以及所述待编译文件对应的资源索引文件;然后,对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件;之后,基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件;最后,基于所述第一可执行文件以及所述第二可执行文件,生成所述目标应用对应的安装包文件。本公开通过将资源索引文件及待编译文件分别进行编译,将资源索引文件与源代码的编译解耦,使得在仅需要修改一方的情况下,无需将另一方也重新编译,在针对待编译文件的编译过程中也无需输入索引资源文件信息,编译效率较高。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
本文中术语“和/或”,仅仅是描述一种关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
经研究发现,在安卓应用程序安装包的编译过程中,需要先根据资源文件的相关信息生成由java语言编写的资源索引文件,也即R.java文件,之后,这些R.java文件会和其他待编译文件,也即源文件一起进入编译环节,如注解处理kapt、注解编译kotlincompile、利用java编译器(javac)编译等步骤,在后续的打包融合过程中还要同步处理这些由资源索引文件编译而来的文件,耗时较长,并且,若开发过程中对资源文件有所调整,需要增量编译,即使对源文件没有影响,也需要重新将资源索引文件及源文件一起编译,导致增量编译的效率很低,耗费了大量的计算资源和时间
基于上述研究,本公开提供了一种安装包生成方法,通过将资源索引文件及待编译文件分别进行编译,将资源索引文件与源代码的编译解耦,在一些需要重新编译资源索引文件的情况下无需重新编译源代码。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种安装包生成方法进行详细介绍,本公开实施例所提供的安装包生成方法的执行主体一般为具有一定计算能力的计算机设备。在一些可能的实现方式中,该安装包生成方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
参见图1所示,为本公开实施例提供的安装包生成方法的流程图,所述方法包括步骤S101~S104,其中:
S101、获取目标应用的待编译文件,以及所述待编译文件对应的资源索引文件。
该步骤中,目标应用即需要编译的应用程序,可以为安卓应用程序,待编译文件即目标应用的源代码文件,待编译文件可以利用kotlin语言编写,kotlin是一种用于多平台应用的静态编程语言,比java语言更加安全、简洁;资源索引文件又被称为R文件,资源索引文件可以为根据目标应用的资源文件相关信息生成的文件,记录了资源文件的路径信息。具体的,可以通过R.txt文件生成资源索引文件R.java,R.java文件由java语言编写。
在一种可能的实施方式中,可以先获取目标应用的资源数据,并将资源数据打包为资源文件,然后,可以根据各个资源数据在资源文件中的位置信息,生成资源索引信息。
S102、对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件。
该步骤中,可以直接对资源索引文件进行编译,生成第一字节码文件及第一可执行文件,其中,第一字节码文件可以为R.jar文件,第一可执行文件可以为R.dex文件。
具体的,可以先对资源索引文件进行编译,得到由字节码编写的第一字节码文件,也即R.jar文件,然后,再对第一字节码文件进行编译,得到由二进制数字编写的第一可执行文件,即R.dex文件,jar文件是一种归档文件,并不是可执行文件,dex文件则为一种可执行文件,最后在安装包中的文件即为dex文件。
虽然安装包最终需要的是dex文件,但要对源代码(也即待编译文件)进行编译,还需要编译成jar格式的资源索引文件(也即第一字节码文件),因此,该步骤同时生成第一字节码文件及第一可执行文件。
S103、基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件。
该步骤中,在得到第一字节码文件之后,可以利用第一字节码文件对待编译文件进行编译,编译的过程中,可以先基于第一字节码文件中指示的资源索引信息,将待编译文件编译为第二字节码文件,其中,第二字节码文件可以为class文件,其后缀名为.class,是一种可以运行在任何支持Java虚拟机的硬件平台和操作系统上的二进制文件,但其并非本地的可执行文件,当运行class文件时,需要先运行Java虚拟机,再通过Java虚拟机运行class文件。因此,第二字节码文件并非最终安装包需要的可执行文件,还需要对第二字节码文件进行处理。
具体的,将待编译文件编译为第二字节码文件的过程可以包括注解处理、注解编译、常规编译,其中,注解处理可以利用kpat注解处理工具,读取待编译文件中的注解,并根据读取的注解生成对应的目标代码。示例性的,可以利用注解处理工具扫描待编译文件中的注解信息,然后利用预先定义好的注解处理方式对注解信息进行操作,如生成.java文件,处理后得到的文件即为目标代码。
在得到目标代码之后,即可以对目标代码及待编译文件进行编译,对目标代码进行编译,即为上述注解编译过程,针对待编译文件进行的编译,即为上述常规编译,其中,注解编译可以利用kotlin编译器进行处理。
在编译过程中,需要使用到与资源相关的信息,在该过程中,可以利用之前生成的第一字节码文件来提供资源相关的信息,从而完成待编译文件及目标代码的编译。
在得到第二字节码文件之后,可以对其进行形式变换处理transform,将其转换为第三字节码文件,第三字节码文件同样为class文件,之后,可以将第三字节码文件编译,得到第二可执行文件,也即dex文件,该过程也可以被称为dexbuild过程,意为可执行文件构建过程。
在常规的编译模式中,上述步骤还会同时对第一字节码文件进行编译,得到第一字节码对应的R.class文件,然后,在transform过程以及dexbuild过程中,仍然将R.class文件作为输入的一部分,导致transform及dexbuild过程需要加载更多的数据,需要消耗更多的时间才能完成计算,然而,R.class文件通常不需要进行transform过程,而在dexbuild过程中生成R.dex,导致资源索引文件与源代码之间在遍以上产生了强耦合性,大量的资源索引文件在多个步骤中都需要使用,并最终与其他class文件一同进行编译,导致整体编译效率较低,以及增量编译时需要重新编译等情况。
因此,本公开实施例提供的安装包生成方法中,将资源索引文件与源文件的编译进行了解耦,先对资源索引文件进行编译,得到第一字节码文件和第一可执行文件,再利用第一字节码文件完成源代码的编译,提高了编译速度,在一些需要重新编译资源索引文件的情况下无需重新编译源代码。
S104、基于所述第一可执行文件以及所述第二可执行文件,生成所述目标应用对应的安装包文件。
在得到第一可执行文件及第二可执行文件之后,即可对应第一可执行文件及第二可执行文件进行融合打包,得到目标应用的安装包文件,在该过程中,若存在一些依赖文件或其他需要的可执行文件,如lib dex、ext dex文件等,则可以将其与第一可执行文件、第二可执行文件一起打包,得到安装包文件,也即apk文件。
在开发场景下,开发人员经常会对目标应用的代码或资源进行修改,在一些情况下,针对资源文件的修改并不会影响程序的源代码本身,仅对资源索引文件起到影响,但由于常规的安装包生成方式中,源代码与资源索引文件的编译是强耦合的,无法单独针对一方进行编译,但在本公开实施例提供的安装包生成方法中,源代码与资源索引文件的编译过程是相互解耦的,在源代码不需改动的情况下,可以直接对资源索引文件进行更新,然后对更新后的资源索引文件进行编译,得到与更新后的资源索引文件匹配的第三可执行文件,最后,将第三可执行文件与第二可执行文件融合打包,即可得到更新资源索引文件后的安装包文件,不需要重新编译源文件。
相对的,若需要对源代码进行修改,而不需要修改资源索引文件时,则可以对待编译文件进行更新,然后利用不需要修改的第一字节码文件对更新后的待编译文件进行编译,得到与更新后的待编译文件匹配的第四可执行文件,再基于第一可执行文件及第四可执行文件生成目标应用在更新资源索引文件后的安装包文件即可。
这样,在仅需要对源代码或资源索引文件之一进行修改的情况下,无需对上述两者都进行重新编译,能够降低大量的编译耗时及所需的计算资源,效率较高。
参见图2所示,为本公开实施例所提供的另一种安装包生成方法的流程图,该方法首先通过资源处理,将资源索引文件R.txt转换为第一可执行文件R.dex及第一字节码文件R.jar,然后,利用R.jar文件对待编译文件进行编译,编译过程包括注解处理、注解编译以及通常编译,然后,对得到的编译结果进行转换操作,再对转换结果进行可执行文件构建,得到dex文件,之后,对多个dex文件进行整合打包,得到安装包,最后,将最开始得到的R.dex文件注入至安装包中,得到了目标应用的完整安装包。
本公开实施例提供的安装包生成方法,首先获取目标应用的待编译文件,以及所述待编译文件对应的资源索引文件;然后,对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件;之后,基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件;最后,基于所述第一可执行文件以及所述第二可执行文件,生成所述目标应用对应的安装包文件。本公开通过将资源索引文件及待编译文件分别进行编译,将资源索引文件与源代码的编译解耦,使得在仅需要修改一方的情况下,无需将另一方也重新编译,在针对待编译文件的编译过程中也无需输入索引资源文件信息,编译效率较高。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与安装包生成方法对应的安装包生成装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述安装包生成方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
参照图3所示,为本公开实施例提供的一种安装包生成装置的示意图,所述装置包括:
获取模块310,用于获取目标应用的待编译文件,以及所述待编译文件对应的资源索引文件;
第一编译模块320,用于对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件;
第二编译模块330,用于基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件;
生成模块340,用于基于所述第一可执行文件以及所述第二可执行文件,生成所述目标应用对应的安装包文件。
一种可选的实施方式中,所述第一编译模块320在对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件时,用于:
对所述资源索引文件进行编译,得到由字节码编写的所述第一字节码文件;
对所述第一字节码文件进行编译,得到由二进制数字编写的第一可执行文件。
一种可选的实施方式中,所述第二编译模块330在基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件时,用于:
基于所述第一字节码文件中指示的资源索引信息,将所述待编译文件编译为第二字节码文件;
对所述第二字节码文件进行形式变换处理,得到与所述待编译文件匹配的第三字节码文件;
将所述第三字节码文件编译为所述第二可执行文件。
一种可选的实施方式中,所述第二编译模块330在基于所述第一字节码文件中指示的资源索引信息,将所述待编译文件编译为第二字节码文件时,用于:
读取所述待编译文件中的注解信息,并基于所述注解信息生成目标代码;
基于所述第一字节码文件中指示的资源索引信息,对所述目标代码及所述待编译文件进行编译,得到所述第二字节码文件。
一种可选的实施方式中,所述装置还包括更新模块,用于:
响应于针对所述资源索引文件的第一编辑指令,基于所述第一编辑指令对所述资源索引文件进行更新;
对更新后的资源索引文件进行编译,得到与所述更新后的资源索引文件匹配的第三可执行文件;
基于所述第三可执行文件及所述第二可执行文件,生成所述目标应用在更新资源索引文件后的安装包文件。
一种可选的实施方式中,所述更新模块还用于:
响应于针对所述待编译文件的第二编辑指令,基于所述第二编辑指令对所述待编译文件进行更新;
基于所述第一字节码文件,对更新后的待编译文件进行编译,得到与所述更新后的待编译文件匹配的第四可执行文件;
基于所述第一可执行文件及所述第四可执行文件,生成所述目标应用在更新资源索引文件后的安装包文件。
一种可选的实施方式中,所述获取模块310在获取所述待编译文件对应的资源索引文件时,用于:
获取所述目标应用的资源数据,并将所述资源数据打包为资源文件;
基于各个资源数据在所述资源文件中的位置信息,生成所述资源索引信息。
本公开通过将资源索引文件及待编译文件分别进行编译,将资源索引文件与源代码的编译解耦,使得在仅需要修改一方的情况下,无需将另一方也重新编译,在针对待编译文件的编译过程中也无需输入索引资源文件信息,编译效率较高。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
对应于图1中的安装包生成方法,本公开实施例还提供了一种电子设备400,如图4所示,为本公开实施例提供的电子设备400结构示意图,包括:
处理器41、存储器42、和总线43;存储器42用于存储执行指令,包括内存421和外部存储器422;这里的内存421也称内存储器,用于暂时存放处理器41中的运算数据,以及与硬盘等外部存储器422交换的数据,处理器41通过内存421与外部存储器422进行数据交换,当所述电子设备400运行时,所述处理器41与所述存储器42之间通过总线43通信,使得所述处理器41执行以下指令:
获取目标应用的待编译文件,以及所述待编译文件对应的资源索引文件;
对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件;
基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件;
基于所述第一可执行文件以及所述第二可执行文件,生成所述目标应用对应的安装包文件。
一种可选的实施方式中,所述对所述资源索引文件进行编译,生成与所述资源索引文件匹配的第一字节码文件以及第一可执行文件,包括:
对所述资源索引文件进行编译,得到由字节码编写的所述第一字节码文件;
对所述第一字节码文件进行编译,得到由二进制数字编写的第一可执行文件。
一种可选的实施方式中,所述基于所述第一字节码文件,对所述待编译文件进行编译,得到与所述待编译文件匹配的第二可执行文件,包括:
基于所述第一字节码文件中指示的资源索引信息,将所述待编译文件编译为第二字节码文件;
对所述第二字节码文件进行形式变换处理,得到与所述待编译文件匹配的第三字节码文件;
将所述第三字节码文件编译为所述第二可执行文件。
一种可选的实施方式中,所述基于所述第一字节码文件中指示的资源索引信息,将所述待编译文件编译为第二字节码文件,包括:
读取所述待编译文件中的注解信息,并基于所述注解信息生成目标代码;
基于所述第一字节码文件中指示的资源索引信息,对所述目标代码及所述待编译文件进行编译,得到所述第二字节码文件。
一种可选的实施方式中,所述方法还包括:
响应于针对所述资源索引文件的第一编辑指令,基于所述第一编辑指令对所述资源索引文件进行更新;
对更新后的资源索引文件进行编译,得到与所述更新后的资源索引文件匹配的第三可执行文件;
基于所述第三可执行文件及所述第二可执行文件,生成所述目标应用在更新资源索引文件后的安装包文件。
一种可选的实施方式中,所述方法还包括:
响应于针对所述待编译文件的第二编辑指令,基于所述第二编辑指令对所述待编译文件进行更新;
基于所述第一字节码文件,对更新后的待编译文件进行编译,得到与所述更新后的待编译文件匹配的第四可执行文件;
基于所述第一可执行文件及所述第四可执行文件,生成所述目标应用在更新资源索引文件后的安装包文件。
一种可选的实施方式中,获取所述待编译文件对应的资源索引文件,包括:
获取所述目标应用的资源数据,并将所述资源数据打包为资源文件;
基于各个资源数据在所述资源文件中的位置信息,生成所述资源索引信息。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的安装包生成方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例还提供一种计算机程序产品,该计算机程序产品承载有程序代码,所述程序代码包括的指令可用于执行上述方法实施例中所述的安装包生成方法的步骤,具体可参见上述方法实施例,在此不再赘述。
其中,上述计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。