编译方法、装置、电子设备及可读存储介质与流程

文档序号:20680751发布日期:2020-05-08 18:22阅读:154来源:国知局
编译方法、装置、电子设备及可读存储介质与流程

本申请实施例涉及计算机技术,具体涉及编译技术,尤其涉及一种编译方法、装置、电子设备及可读存储介质。



背景技术:

应用程序在发布之前的研发过程中,可能需要进行多次的编译。在编译时,将应用程序的源代码以及相关的资源输入到编译工具中,由编译工具进行编译,并输出应用程序的应用程序包。以安卓操作系统为例,gradle是应用较为广泛的一种编译工具。对于需要运行在安卓操作系统中的应用程序,可使用gradle进行编译。

现有技术中,gradle编译应用程序时,将待编译的应用程序的代码和资源作为一个主程序,统一进行编译,进而得到一个统一的编译结果。

但是,对于具有插件化需求的应用程序,使用现有的编译方式可能出现插件拆分复杂度高、难以得到预期的插件编译结果等问题。



技术实现要素:

本申请实施例提供一种编译方法、装置、电子设备及可读存储介质,用于解决现有技术中插件拆分复杂度高、难以得到预期的插件编译结果的问题。

第一方面,本申请实施例提供一种编译方法,包括:

在第一编译工程中获取待编译的对象,所述待编译的对象包括待编译的应用程序的代码和资源,所述代码和资源分别归属于所述应用程序的非插件程序以及至少一个插件程序;

根据所述非插件程序与所述至少一个插件程序的配置信息,在第一编译工程中对所述待编译的对象进行处理,得到所述非插件程序的资源编译结果、每个所述插件程序的资源编译结果、所述非插件程序的代码编译结果以及每个所述插件程序的代码编译结果;

分别输出所述非插件程序的可执行文件和所述插件程序的可执行文件。

作为一种可能的实现方式,所述分别输出所述非插件程序的可执行文件和所述插件程序的可执行文件,包括:

根据所述非插件程序的资源编译结果、所述非插件程序的代码编译结果,通过所述第一编译工程输出所述非插件程序的可执行文件;

根据所述插件程序的资源编译结果和所述插件程序的代码编译结果,通过第二编译工程输出所述插件程序的可执行文件。

作为一种可能的实现方式,所述根据所述非插件程序与所述至少一个插件程序的配置信息,在第一编译工程中对所述待编译的对象进行处理,得到所述非插件程序的资源编译结果、每个所述插件程序的资源编译结果、所述非插件程序的代码编译结果以及每个所述插件程序的代码编译结果,包括:

根据所述非插件程序与所述至少一个插件程序的配置信息,对所述待编译的对象进行资源拆分,得到所述非插件程序的资源和每个所述插件程序的资源;

对所述非插件程序的资源和每个所述插件程序的资源进行编译,得到所述非插件程序的资源编译结果和每个所述插件程序的资源编译结果;

根据所述非插件程序与所述至少一个插件程序的配置信息,对编译后的代码编译结果进行拆分,得到所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果。

作为一种可能的实现方式,所述对所述非插件程序的资源和每个所述插件程序的资源进行编译,得到所述非插件程序的资源编译结果和每个所述插件程序的资源编译结果,包括:

对所述非插件程序的资源和每个所述插件程序的资源进行编译以及分配标识,得到所述非插件程序的资源编译结果和每个所述插件程序的资源编译结果,所述非插件程序的资源编译结果的标识以及每个所述插件程序的资源编译结果的标识两两不同。

作为一种可能的实现方式,所述对编译后的代码编译结果进行拆分,得到所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果之后,还包括:

对所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果同时进行混淆处理,得到混淆处理后的所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果。

作为一种可能的实现方式,所述根据所述插件程序的资源编译结果和所述插件程序的代码编译结果,通过第二编译工程输出所述插件程序的可执行文件,包括:

将所述插件程序的资源编译结果和所述插件程序的代码编译结果输入所述第二编译工程中,以通过所述第二编译工程对所述插件程序的资源编译结果进行替换处理,并根据替换处理后的所述插件程序的资源编译结果以及所述插件程序的代码编译结果,输出插件程序的可执行文件。

作为一种可能的实现方式,所述根据所述非插件程序与所述至少一个插件程序的配置信息,对编译后的代码编译结果进行拆分,得到所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果,包括:

根据目标配置文件,对编译后的代码编译结果进行拆分,得到所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果;

其中,所述目标配置文件用于标识所述配置信息。

作为一种可能的实现方式,所述根据所述非插件程序与所述至少一个插件程序的配置信息,对所述待编译的对象进行资源拆分,得到所述非插件程序的资源和每个所述插件程序的资源,包括:

根据目标配置文件,对所述待编译的对象进行资源拆分,得到所述非插件程序的资源和每个所述插件程序的资源;

其中,所述目标配置文件用于标识所述配置信息。

第二方面,本申请实施例提供一种编译装置,包括:

获取模块,用于在第一编译工程中获取待编译的对象,所述待编译的对象包括待编译的应用程序的代码和资源,所述代码和资源分别归属于所述应用程序的非插件程序以及至少一个插件程序;

处理模块,用于根据所述非插件程序与所述至少一个插件程序的配置信息,在第一编译工程中对所述待编译的对象进行处理,得到所述非插件程序的资源编译结果、每个所述插件程序的资源编译结果、所述非插件程序的代码编译结果以及每个所述插件程序的代码编译结果;

输出模块,用于分别输出所述非插件程序的可执行文件和所述插件程序的可执行文件。

作为一种可能的实现方式,所述输出模块具体用于:

用于根据所述非插件程序的资源编译结果、所述非插件程序的代码编译结果,通过所述第一编译工程输出所述非插件程序的可执行文件;以及,

根据所述插件程序的资源编译结果和所述插件程序的代码编译结果,通过第二编译工程输出所述插件程序的可执行文件。

作为一种可能的实现方式,所述处理模块具体用于:

根据所述非插件程序与所述至少一个插件程序的配置信息,对所述待编译的对象进行资源拆分,得到所述非插件程序的资源和每个所述插件程序的资源;以及,

对所述非插件程序的资源和每个所述插件程序的资源进行编译,得到所述非插件程序的资源编译结果和每个所述插件程序的资源编译结果;以及,

根据所述非插件程序与所述至少一个插件程序的配置信息,对编译后的代码编译结果进行拆分,得到所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果。

作为一种可能的实现方式,所述处理模块具体用于:

对所述非插件程序的资源和每个所述插件程序的资源进行编译以及分配标识,得到所述非插件程序的资源编译结果和每个所述插件程序的资源编译结果,所述非插件程序的资源编译结果的标识以及每个所述插件程序的资源编译结果的标识两两不同。

作为一种可能的实现方式,所述处理模块还用于:

对所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果同时进行混淆处理,得到混淆处理后的所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果。

作为一种可能的实现方式,所述输出模块具体用于:

将所述插件程序的资源编译结果和所述插件程序的代码编译结果输入所述第二编译工程中,以通过所述第二编译工程对所述插件程序的资源编译结果进行替换处理,并根据替换处理后的所述插件程序的资源编译结果以及所述插件程序的代码编译结果,输出插件程序的可执行文件。

作为一种可能的实现方式,所述处理模块具体用于:

根据目标配置文件,对编译后的代码编译结果进行拆分,得到所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果;

其中,所述目标配置文件用于标识所述配置信息。

作为一种可能的实现方式,所述处理模块具体用于:

根据目标配置文件,对所述待编译的对象进行资源拆分,得到所述非插件程序的资源和每个所述插件程序的资源;

其中,所述目标配置文件用于标识所述配置信息。

第三方面,本申请实施例提供一种电子设备,包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述第一方面所述的方法。

第四方面,本申请实施例提供一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使所述计算机执行上述第一方面所述的方法。

上述申请中的一个实施例具有如下优点或有益效果:

基于第一编译工程中的一次统一的构建对应用程序的插件代码和非插件代码进行整体编译,从而可以避免出现无法找到依赖信息的错误,并且,基于插件程序和非插件程序的配置信息,在第一编译工程的整体编译过程中对各插件的资源和代码进行拆分,并分别输出非插件程序和插件程序的可执行文件。上述过程中不需要对应用程序的源程序进行修改,也不需要自行拆分插件程序对应模块,仅基于配置信息即可得到插件程序和非插件程序的可执行文件,因此使得具有插件化需求的应用程序的插件编译的复杂度低并且可以避免编译报错。

上述可选方式所具有的其他效果将在下文中结合具体实施例加以说明。

附图说明

附图用于更好地理解本方案,不构成对本申请的限定。其中:

图1为某个应用程序的源程序的依赖关系示例;

图2为本申请实施例提供的编译方法的流程示意图;

图3为本申请实施例提供的编译方法的流程示意图;

图4为gradle的编译过程的示意;

图5为本申请实施例提供的一种编译装置的模块结构图;

图6是是根据本申请实施例的编译方法的电子设备的框图。

具体实施方式

以下结合附图对本申请的示范性实施例做出说明,其中包括本申请实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本申请的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

现有技术中,gradle编译应用程序时,将待编译的应用程序的代码和资源作为一个主程序,统一进行编译,进而得到一个统一的编译结果。而对于一些功能复杂的应用程序来说,可能是由多个开发团队共同开发完成,每个团队分别负责开发一部分插件的模块,各个模块之间可能存在较多需要互相关联和依赖的地方,而同时,每个团队又需要分别编译自己负责的模块,以得到各种插件。图1为某个应用程序的源程序的依赖关系示例,如图1所示,应用程序中包括一个基础模块以及n个业务模块,其中,每个业务模块均依赖基础模块。同时,各业务模块之间也可能存在依赖关系。如果使用gradle编译方法,对于每个插件来说,均需要将自身对应的模块以及具有依赖关系的模块拆分成插件工程来进行编译,而由于各模块之间复杂的依赖关系,使得拆分复杂度非常高,可能会出现编译过程中因找不到依赖的模块而报错,从而导致难以得到预期的插件编译结果的问题。

本申请实施例基于上述问题,提出一种编译方法,基于一次统一的构建对应用程序进行整体编译,将插件代码和非插件代码整体编译,从而可以避免出现无法找到依赖信息的错误,进而,在整体编译过程中对各插件的资源和代码进行拆分,从而得到不同的插件,从而使得具有插件化需求的应用程序的插件编译的复杂度低并且避免编译报错。

应理解,本申请实施例所述的待编译的应用程序,是指未经过编译的应用程序的源程序。

图2为本申请实施例提供的编译方法的流程示意图,该方法的执行主体为可以安装并运行编译工具的电子设备。如图2所示,该方法包括:

s201、在第一编译工程中获取待编译的对象,该待编译的对象包括待编译的应用程序的代码和资源,该代码和资源分别归属于应用程序的非插件程序以及至少一个插件程序。

值得说明的是,本申请实施例的方法可以应用于现有的gradle编译工具,对gradle改进,在其中增加本申请实施例的处理过程,本申请以下实施例也均以在gradle上的改进为例进行说明。但是本申请实施例并不以此为限制,同样可以应用在其他编译工具中。

对于gradle来说,当需要使用gradle进行编译处理时,首先需要新建一个编译工程,并将待编译的源程序输入到该编译工程中并启动编译。在本申请实施例中,上述的第一编译工程可以称作编译应用程序的主工程,该主工程的输入为待编译的应用程序的完整的源程序,该完整的源程序中包括资源和代码。应用程序的非插件程序和各插件程序分别对应于其中的一部分资源和代码。

可选的,应用程序的非插件程序可以是指应用程序的主程序或者基础程序。

应理解,基于前述的关联和依赖关系,对于源程序中的某个资源、函数代码等,可能同时归属于多个程序。例如,某个函数,即是非插件程序的代码,又是插件程序的代码。

可选的,上述的资源,可以指应用程序运行时需要加载的资源,例如需要加载的图片、界面元素等。

具体实施过程中,在gradle中创建上述第一编译工程并将待编译的应用程序的完整的源程序输入到第一编译工程中,即可获取到上述的待编译的对象。

s202、根据上述非插件程序与上述至少一个插件程序的配置信息,在第一编译工程中对上述待编译的对象进行处理,得到上述非插件程序的资源编译结果、每个上述插件程序的资源编译结果、上述非插件程序的代码编译结果以及每个上述插件程序的代码编译结果。

其中,上述的处理包括:拆分、编译。上述配置信息用于标识上述非插件程序与代码和资源的对应关系,以及上述述插件程序与代码和资源的对应关系。

以上述图1所示的源程序的依赖关系为例,应用程序的源程序中包括基础模块以及多个业务模块,每个模块中均包括资源和代码。则一种示例中,上述的配置信息可以标记为:基础模块+业务模块1=非插件程序,基础模块+模块2+模块3=插件程序1。由该示例可知,插件程序1对应于基础模块、业务模块2和业务模块3,即这些模块中的代码和资源归属于插件程序1,因此,在编译时,这些模块的代码和资源编译所得到的结果为插件程序1的编译结果。另外,由上述示例可知,基础模块既归属于插件程序1,又归属于非插件程序,因此,插件程序1和非插件程序的编译均需要使用该基础模块。

上述配置信息可以在编译之前由应用程序的开发人员预先记录,并保存在预设的目录中。当在上述第一编译工程中执行至本步骤时,从该预设的目录中读取上述配置信息,并基于该配置信息,对待编译的对象进行拆分、编译处理。具体过程将在下述实施例中详细说明。

s203、分别输出上述非插件程序的可执行文件和上述插件程序的可执行文件。

在得到上述的非插件程序的资源编译结果、每个插件程序的资源编译结果、非插件程序的代码编译结果以及每个插件程序的代码编译结果后,可以基于这些信息,分别输出非插件程序的可执行文件和每个插件程序的可执行文件。

其中,可执行文件可以在终端设备上执行,以实现各自程序的功能。

本实施例中,基于第一编译工程中的一次统一的构建对应用程序的插件代码和非插件代码进行整体编译,从而可以避免出现无法找到依赖信息的错误,并且,基于插件程序和非插件程序的配置信息,在第一编译工程的整体编译过程中对各插件的资源和代码进行拆分,并分别输出非插件程序和插件程序的可执行文件。上述过程中不需要对应用程序的源程序进行修改,也不需要自行拆分插件程序对应模块,仅基于配置信息即可得到插件程序和非插件程序的可执行文件,因此使得具有插件化需求的应用程序的插件编译的复杂度低并且可以避免编译报错。

作为一种可选的实施方式,在上述步骤s203中输出非插件程序的可执行文件和插件程序的可执行文件时,可以根据上述非插件程序的资源编译结果、上述非插件程序的代码编译结果,通过上述第一编译工程输出上述非插件程序的可执行文件,以及,根据上述插件程序的资源编译结果和上述插件程序的代码编译中,通过第二编译工程输出上述插件程序的可执行文件。

值得说明的是,上述输出上述两种可执行文件的执行顺序不分先后。

经过上述步骤s202处理之后,非插件程序和插件程序的代码和资源的编译结果已经得到拆分,在此基础上,通过该第一编译工程仅对非插件资源的资源编译结果和代码编译结果进行后续编译处理,例如将前述编译得到的dex文件编译为apk文件,从而得到非插件资源的编译结果。

可选的,上述第二编译工程可以是区别于上述第一编译工程的其他工程。每个插件程序可以对应一个第二编译工程,因此,如果插件程序有多个,则可以有多个第二编译工程。

可选的,在上述步骤s202中得到插件程序的代码编译结果和资源编译结果后,可以将插件程序的代码编译结果和资源编译结果分别保存至插件程序对应的目录下。进而,在本步骤中,可以自动创建插件程序对应的第二编译工程,并从插件程序对应的目录下读取其代码编译结果和资源编译结果,将这两种结果作为第二编译工程的输入并进行后续编译处理,从而得到插件程序的可执行文件。

如前述步骤s202中所述,对于待编译的对象进行的处理包括拆分和编译。以下说明该处理的一种可选的处理过程。

图3为本申请实施例提供的编译方法的流程示意图,应理解,下述的步骤s301-s303可以均在第一编译工程中进行。如图3所示,上述步骤s202的一种可选的处理方式包括:

s301、根据上述非插件程序与上述至少一个插件程序的配置信息,对上述待编译的对象进行资源拆分,得到上述非插件程序的资源和每个所述插件程序的资源。

上述配置信息标识了非插件程序与代码和资源的对应关系,以及插件程序与代码和资源的对应关系,因此,通过该配置信息,可以获知哪些代码和资源属于哪个插件程序或非插件程序。进而,基于该配置信息进行资源拆分时,具体可以将属于一个插件程序的资源打包为一个单元,将属于非插件程序的资源打包为一个单元。

作为一种可选的方式,在对非插件程序的资源和每个插件程序的资源进行编译时,可以在第一编译工程中对非插件程序的资源和每个插件程序的资源进行编译以及分配标识,得到非插件程序的资源编译结果和每个插件程序的资源编译结果,其中,非插件程序的资源编译结果的标识以及每个插件程序的资源编译结果的标识两两不同。

经过上述分配标识的处理之后,每个资源编译结果分别具有唯一的标识,以区别与其他资源编译结果,因此,能够保证个资源编译结果的标识不存在任何冲突,进而避免后续编译过程中出现错误。

s302、对非插件程序的资源和每个插件程序的资源进行编译,得到非插件程序的资源编译结果和每个插件程序的资源编译结果。

在将非插件程序和各插件程序的资源分别拆分形成各自的单元之后,可以在第一编译工程中分别对每个单元进行资源编译。

在完成上述资源编译之后,可以将各插件程序的资源编译结果保存至各插件程序对应的目录中,而第一编译工程中仅保留非插件程序的资源编译结果。

s303、根据上述非插件程序与上述至少一个插件程序的配置信息,对编译后的代码编译结果进行拆分,得到上述非插件程序的代码编译结果和每个上述插件程序的代码编译结果。

本步骤在对上述待编译的对象进行代码编译后执行。

可选的,对待编译的对象进行代码编译,是指对应用程序的完整代码统一进行代码编译,通过这种统一编译,不会出现无法找到依赖的代码的问题。进而,在完成完整的代码编译后,可以按照上述的配置信息,对编译后的代码进行拆分。具体的,通过上述配置信息,可以获知哪些代码属于哪个插件程序或非插件程序,因此,可以将属于一个插件程序的代码编译结果打包为一个单元,将属于非插件程序的代码编译结果打包为一个单元。

在得到非插件程序和插件程序各自的代码编译结果之后,可以将各插件程序的代码编译结果保存至各插件程序对应的目录中,而第一编译工程中仅保留非插件程序的代码编译结果。

作为一种可选的方式,在上述对编译后的代码编译结果进行拆分之后,还可以对非插件程序的代码编译结果和每个插件程序的代码编译结果同时进行混淆处理,得到混淆处理后的非插件程序的代码编译结果和每个插件程序的代码编译结果。

其中,上述同时进行混淆处理,是指对非插件程序的代码编译结果和每个插件程序的代码编译结果统一进行混淆处理。通过同时进行混淆处理,能够保证非插件程序和各插件程序之间不会存在混淆冲突,进而保证应用程序的编译结果准确。

以下基于gradle的编译过程,说明上述步骤s301-s303在gradle的改进应用过程。

图4为gradle的编译过程的示意,如图4所示,gradle的编译过程包括如下任务步骤:预构建(prebuild)、准备发布依赖(preparereleasedependencies)、合并发布资源(mergereleaseresources)、处理发布显示(processreleasemanifest)、生成发布资源(generatereleasesources)、java预编译发布(javaprecompilerelease)、用javac编译发布java(compilereleasejavawithjavac)、编译发布资源(compilereleasesources)、发布转换处理(transformclassesandresourceswithproguardforrelease)以及打包发布(packagerelease)。

电子设备可以监听第一编译工程的上述各任务,当监听到第一编译工程已经执行到下述的各任务时,在gradle原始处理基础上,增加本申请实施例的处理过程。继续参照图4,具体如下:

当监听到已经开始执行mergereleaseresources任务时,在gradle原处理之上,增加上述步骤s301的过程,即进行资源拆分。仅将非插件程序的资源作为第一编译工程的资源。另外,在该步骤中还可以对某些资源进行统一的筛选和预处理。

当监听到已经开始执行generatereleasesource任务时,在gradle原处理中对属于第一编译工程的资源进行编译的基础上,增加上述步骤s302的过程,增加对各插件工程的资源进行编译的操作。另外,编译完成后,将各插件工程的资源编译结果保存到指定目录,第一编译工程中仅保留非插件程序的资源编译结果。

当监听到已经开始执行compilereleasejavawithjavac任务时,由compilereleasejavawithjavac任务对应用程序的完整代码统一进行编译。可以在本任务中对编译之前的源代码文件进行任何的修改和移动,以实现对编译过程的更加精准的控制和修改。

当监听到已经开始执行transformclassesandresourceswithproguardforrelease任务时,在gradle原处理之上,增加上述步骤s301的处理过程,增加对各插件程序的代码编译结果的拆分。

具体的,compilereleasejavawithjavac任务可将代码编译为多个jar文件,在transformclassesandresourceswithproguardforrelease任务中,按照配置信息对jar文件进行拆分,并将每个插件程序的jar合成为一个jar文件。另外,拆分完成后,将各插件工程的资源编译结果保存到指定目录,第一编译工程中仅保留非插件程序的资源编译结果。

增加了上述的处理之后,gradle的第一编译工程中仅保留了非插件程序的资源和代码编译结果,继续执行packagerelease任务,即可得到非插件程序的可执行文件,例如apk文件。

而对于拆分出来的插件程序的资源编译结果和代码编译结果,已经保存至指定的目录,在创建第二编译工程之后,将上述的结果输入至编译工程中。可选的,第二编译工程的执行过程按照上述图4所示的任务步骤执行。

作为一种可选的实现方式,电子设备也可以对第二编译工程进行任务监听。当监听到已经开始执行mergereleaseresources任时,对插件程序的资源编译结果进行替换处理,并根据替换处理后的资源编译结果以及插件程序的代码编译结果,输出插件程序的可执行文件。其中,上述替换处理可以指将上述资源编译结果替换第二编译工程中原有的初始值。通过该替换操作,可以使得第二编译工程可以在后续编译处理中可以获取到正确的资源信息,进而保证编译结果的准确。

作为一种可选的实现方式,前述实施例的配置信息可以以目标配置文件的形式来表示。

相应的,在上述步骤s303中,可以根据目标配置文件,对编译后的代码编译结果进行拆分,得到非插件程序的代码编译结果和每个插件程序的代码编译结果。

相应的,在上述步骤s301中,可以根据目标配置文件,对待编译的对象进行资源拆分,得到非插件程序的资源和每个插件程序的资源。

示例性的,上述目标配置文件可以为xml文件。

图5为本申请实施例提供的一种编译装置的模块结构图,如图5所示,该装置包括:

获取模块501,用于在第一编译工程中获取待编译的对象,所述待编译的对象包括待编译的应用程序的代码和资源,所述代码和资源分别归属于所述应用程序的非插件程序以及至少一个插件程序。

处理模块502,用于根据所述非插件程序与所述至少一个插件程序的配置信息,在第一编译工程中对所述待编译的对象进行处理,得到所述非插件程序的资源编译结果、每个所述插件程序的资源编译结果、所述非插件程序的代码编译结果以及每个所述插件程序的代码编译结果。

输出模块503,用于分别输出所述非插件程序的可执行文件和所述插件程序的可执行文件。

作为一种可选的实施方式,输出模块503具体用于:

根据所述非插件程序的资源编译结果、所述非插件程序的代码编译结果,通过所述第一编译工程输出所述非插件程序的可执行文件;以及,根据所述插件程序的资源编译结果和所述插件程序的代码编译结果,通过第二编译工程输出所述插件程序的可执行文件。

作为一种可选的实施方式,处理模块502具体用于:

根据所述非插件程序与所述至少一个插件程序的配置信息,对所述待编译的对象进行资源拆分,得到所述非插件程序的资源和每个所述插件程序的资源;以及,对所述非插件程序的资源和每个所述插件程序的资源进行编译,得到所述非插件程序的资源编译结果和每个所述插件程序的资源编译结果;以及,根据所述非插件程序与所述至少一个插件程序的配置信息,对编译后的代码编译结果进行拆分,得到所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果。

作为一种可选的实施方式,处理模块502具体用于:

对所述非插件程序的资源和每个所述插件程序的资源进行编译以及分配标识,得到所述非插件程序的资源编译结果和每个所述插件程序的资源编译结果,所述非插件程序的资源编译结果的标识以及每个所述插件程序的资源编译结果的标识两两不同。

作为一种可选的实施方式,处理模块502还用于:

对所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果同时进行混淆处理,得到混淆处理后的所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果。

作为一种可选的实施方式,输出模块503具体用于:

将所述插件程序的资源编译结果和所述插件程序的代码编译结果输入所述第二编译工程中,以通过所述第二编译工程对所述插件程序的资源编译结果进行替换处理,并根据替换处理后的所述插件程序的资源编译结果以及所述插件程序的代码编译结果,输出插件程序的可执行文件。

作为一种可选的实施方式,处理模块502具体用于:

根据目标配置文件,对编译后的代码编译结果进行拆分,得到所述非插件程序的代码编译结果和每个所述插件程序的代码编译结果。

其中,所述目标配置文件用于标识所述配置信息。

作为一种可选的实施方式,处理模块502具体用于:

根据目标配置文件,对所述待编译的对象进行资源拆分,得到所述非插件程序的资源和每个所述插件程序的资源。

其中,所述目标配置文件用于标识所述配置信息。

本申请实施例提供的编译装置,可以执行上述方法实施例中的方法步骤,其实现原理和技术效果类似,在此不再赘述。

需要说明的是,应理解以上装置的各个模块的划分仅仅是一种逻辑功能的划分,实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块通过处理元件调用软件的形式实现,部分模块通过硬件的形式实现。例如,确定模块可以为单独设立的处理元件,也可以集成在上述装置的某一个芯片中实现,此外,也可以以程序代码的形式存储于上述装置的存储器中,由上述装置的某一个处理元件调用并执行以上确定模块的功能。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。这里所述的处理元件可以是一种集成电路,具有信号的处理能力。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。

例如,以上这些模块可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个特定集成电路(applicationspecificintegratedcircuit,asic),或,一个或多个微处理器(digitalsignalprocessor,dsp),或,一个或者多个现场可编程门阵列(fieldprogrammablegatearray,fpga)等。再如,当以上某个模块通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如中央处理器(centralprocessingunit,cpu)或其它可以调用程序代码的处理器。再如,这些模块可以集成在一起,以片上系统(system-on-a-chip,soc)的形式实现。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

根据本申请的实施例,本申请还提供了一种电子设备和一种可读存储介质。

如图6所示,是根据本申请实施例的编译方法的电子设备的框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本申请的实现。

如图6所示,该电子设备包括:一个或多个处理器601、存储器602,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在电子设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示设备)上显示gui的图形信息的指令。在其它实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个电子设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图6中以一个处理器601为例。

存储器602即为本申请所提供的非瞬时计算机可读存储介质。其中,所述存储器存储有可由至少一个处理器执行的指令,以使所述至少一个处理器执行本申请所提供的编译方法。本申请的非瞬时计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行本申请所提供的编译方法。

存储器602作为一种非瞬时计算机可读存储介质,可用于存储非瞬时软件程序、非瞬时计算机可执行程序以及模块,如本申请实施例中的编译方法对应的程序指令/模块(例如,附图5所示的获取模块501、处理模块502和输出模块503)。处理器601通过运行存储在存储器602中的非瞬时软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的编译方法。

存储器602可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据编译处理的电子设备的使用所创建的数据等。此外,存储器602可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些实施例中,存储器602可选包括相对于处理器601远程设置的存储器,这些远程存储器可以通过网络连接至编译处理的电子设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

编译方法的电子设备还可以包括:输入装置603和输出装置604。处理器601、存储器602、输入装置603和输出装置604可以通过总线或者其他方式连接,图6中以通过总线连接为例。

输入装置603可接收输入的数字或字符信息,以及产生与编译处理的电子设备的用户设置以及功能控制有关的键信号输入,例如触摸屏、小键盘、鼠标、轨迹板、触摸板、指示杆、一个或者多个鼠标按钮、轨迹球、操纵杆等输入装置。输出装置604可以包括显示设备、辅助照明装置(例如,led)和触觉反馈装置(例如,振动电机)等。该显示设备可以包括但不限于,液晶显示器(lcd)、发光二极管(led)显示器和等离子体显示器。在一些实施方式中,显示设备可以是触摸屏。

此处描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、专用asic(专用集成电路)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。

这些计算程序(也称作程序、软件、软件应用、或者代码)包括可编程处理器的机器指令,并且可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。如本文使用的,术语“机器可读介质”和“计算机可读介质”指的是用于将机器指令和/或数据提供给可编程处理器的任何计算机程序产品、设备、和/或装置(例如,磁盘、光盘、存储器、可编程逻辑装置(pld)),包括,接收作为机器可读信号的机器指令的机器可读介质。术语“机器可读信号”指的是用于将机器指令和/或数据提供给可编程处理器的任何信号。

为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。

计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发申请中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本申请公开的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本申请保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本申请的精神和原则之内所作的修改、等同替换和改进等,均应包含在本申请保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1