组件化下利用一套源码编译多个AndroidAPP的方法及装置与流程

文档序号:15828739发布日期:2018-11-03 00:12阅读:185来源:国知局

本发明实施例涉及android领域,具体涉及一种组件化下利用一套源码编译多个androidapp的方法及装置。

背景技术

组件化已成为近两年移动端比较成熟的技术,大中型的app(application,应用)大都会经过组件化。目前已有一套源码编译支持多个app的解决方案,这些app可以拥有不同的签名、包名、界面等。但现有方案仅支持未组件化的代码结构,无法支持组件化后的项目一套源码编译多个app,无法满足组件化下一套源码快速发布拥有不同签名、包名、界面的多个app。



技术实现要素:

针对现有技术存在的不足和缺陷,本发明实施例提供一种组件化下利用一套源码编译多个androidapp的方法及装置。

一方面,本发明实施例提出一种组件化下利用一套源码编译多个androidapp的方法,包括:

s1、获取待编译得到的androidapp的各个模块module的编译配置数据;

s2、利用所述各个模块module的编译配置数据对所述androidapp的组件化后的源码进行编译,得到所述androidapp。

另一方面,本发明实施例提出一种组件化下利用一套源码编译多个androidapp的装置,包括:

获取单元,用于获取待编译得到的androidapp的各个模块module的编译配置数据;

编译单元,用于利用所述各个模块module的编译配置数据对所述androidapp的组件化后的源码进行编译,得到所述androidapp。

第三方面,本发明实施例提供一种电子设备,包括:处理器、存储器、总线及存储在存储器上并可在处理器上运行的计算机程序;

其中,所述处理器,存储器通过所述总线完成相互间的通信;

所述处理器执行所述计算机程序时实现上述方法。

第四方面,本发明实施例提供一种非暂态计算机可读存储介质,所述存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述方法。

本发明实施例提供的组件化下利用一套源码编译多个androidapp的方法及装置,获取待编译得到的androidapp的各个模块module的编译配置数据;并利用所述各个模块module的编译配置数据对所述androidapp的组件化后的源码进行编译,得到所述androidapp,通过上述方案,能编译出一套源码的多个版本的androidapp,即能实现组件化下利用一套源码打包出多个androidapp的目的。

附图说明

图1为本发明组件化下利用一套源码编译多个androidapp的方法一实施例的流程示意图;

图2为本发明组件化下利用一套源码编译多个androidapp的装置一实施例的结构示意图;

图3为本发明实施例提供的一种电子设备的实体结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明实施例保护的范围。

参看图1,本实施例公开一种组件化下利用一套源码编译多个androidapp的方法,包括:

s1、获取待编译得到的androidapp的各个模块module的编译配置数据;

s2、利用所述各个模块module的编译配置数据对所述androidapp的组件化后的源码进行编译,得到所述androidapp。

本实施例中,编译配置数据为对组件化后的源码进行编译所需要的配置数据,包括配置参数和资源数据,根据编译配置数据对组件化后的源码进行编译,能够获得与该编译配置数据相对应的版本的androidapp。举例来说,若想获得源码m的测试版本app,则需要获取测试版本app的各个模块module的编译配置数据;并利用所述各个模块module的编译配置数据对源码m进行编译,得到测试版本app。而若想获得源码m的线上版本app,则需要获取线上版本app的各个模块module的编译配置数据;并利用所述各个模块module的编译配置数据对源码m进行编译,得到线上版本app。

本发明实施例提供的组件化下利用一套源码编译多个androidapp的方法,获取待编译得到的androidapp的各个模块module的编译配置数据;并利用所述各个模块module的编译配置数据对所述androidapp的组件化后的源码进行编译,得到所述androidapp,通过上述方案,能编译出一套源码的多个版本的androidapp,即能实现组件化下利用一套源码打包出多个androidapp的目的。

在前述方法实施例的基础上,在所述s1之前,还可以包括:

对所述各个模块module中每一个模块module,使用构建工具gradle为该模块module创建编译配置文件build.gradle,其中,所述编译配置文件build.gradle存放有该模块module的构建变种版本buildvariant;

其中,所述s1,可以包括:

获取所述各个模块module的构建变种版本buildvariant;

所述s2,可以包括:

利用所述各个模块module的构建变种版本buildvariant,并使用编译工具gradleplugin对所述源码进行编译,得到所述androidapp。

本实施例中,使用构建工具gradle在为所述各个模块module中每一个模块module创建编译配置文件build.gradle时,需要在每一个模块module的编译配置文件build.gradle中添加dsl(domainspecificlanguage,领域专用语言)容器-产品类别productflavors对象,在productflavors对象中根据需求定义一个或多个类别flavor,所有模块module中定义的productflavors对象需要保持一致。另外,需要将编译工具gradleplugin配置为3.0及以上版本,因为在3.0+之前的版本productflavors仅仅在主模块module中生效,即切换编译控制器buildvariants时,库libmodule不会随着被应用。在所述各个模块module中每一个模块module的build.gradle文件中定义一致的productflavors,此时编译工程,每一个模块module都会对应到一致的构建变种版本buildvariant(包括产品类别productflavor和构建类型buildtype),从而能够编译出对应签名、包名和界面的androidapp。

在前述方法实施例的基础上,在所述s1之前,还可以包括:

对所述源码对应的每一个模块module,使用构建工具gradle为该模块module创建第一java代码文件和第一资源文件,其中,所述第一java代码文件存放有所述源码可编译出的包含有该模块module的所有androidapp包含的该模块module共有的java代码,所述第一资源文件存放有所述包含有该模块module的所有androidapp包含的该模块module共用的资源;

对所述各个模块module中每一个包含有除所述第一java代码文件所包含的java代码外的其它java代码的模块module,使用构建工具gradle为该模块module创建第二java代码文件,对所述各个模块module中每一个使用有除所述第一资源文件所包含的资源外的其它资源的模块module,使用构建工具gradle为该模块module创建第二资源文件,其中,所述第二java代码文件存放有对应模块module包含的java代码中除所述第一java代码文件所包含的java代码外的java代码,所述第二资源文件存放有对应模块module使用的资源中除所述第一资源文件所包含的资源外的资源;

其中,所述s2,可以包括:

利用所述第一java代码文件、所述第一资源文件、所述各个模块module的构建变种版本buildvariant,以及所述第二java代码文件和所述第二资源文件,并使用编译工具gradleplugin对所述源码进行编译,得到所述androidapp。

本实施例中,所述源码对应的每一个模块module都有对应的路径src/main/java用于存放第一java代码文件,以及路径src/main/res用于存放第一资源文件。对所述各个模块module中每一个包含有除所述第一java代码文件所包含的java代码外的其它java代码的模块module,以及所述各个模块module中每一个使用有除所述第一资源文件所包含的资源外的其它资源的模块module,即需要改动的模块module,可以在对应的src目录下与main同级的位置建立productflavors的文件夹(该文件夹名字必须与build.gradle中定义的名字完全一致),在该文件夹下可以建立java和res目录,分别用于存放该模块module包含的java代码中除所述第一java代码文件所包含的java代码外的java代码和该模块module使用的资源中除所述第一资源文件所包含的资源外的资源,即该模块module特有的java代码和资源。

在前述方法实施例的基础上,至少一个编译配置文件build.gradle中可以使用[flavor]compile的方式来引用其它模块module。

本实施例中,编译工具gradleplugin的编译compile可以定义模块module间的依赖关系,因而如果只需要在某个产品中用到某个模块module,则可以在与该模块module存在依赖关系的模块module的编译配置文件build.gradle中使用[flavor]compile的方式来引用该模块module,从而实现不同产品包括不同模块module的目的。

参看图2,本实施例公开一种组件化下利用一套源码编译多个androidapp的装置,包括:

获取单元,用于获取待编译得到的androidapp的各个模块module的编译配置数据;

编译单元,用于利用所述各个模块module的编译配置数据对所述androidapp的组件化后的源码进行编译,得到所述androidapp。

具体地,所述获取单元1获取待编译得到的androidapp的各个模块module的编译配置数据;所述编译单元2利用所述各个模块module的编译配置数据对所述androidapp的组件化后的源码进行编译,得到所述androidapp。

本发明实施例提供的组件化下利用一套源码编译多个androidapp的装置,获取待编译得到的androidapp的各个模块module的编译配置数据;并利用所述各个模块module的编译配置数据对所述androidapp的组件化后的源码进行编译,得到所述androidapp,通过上述方案,能编译出一套源码的多个版本的androidapp,即能实现组件化下利用一套源码打包出多个androidapp的目的。

在前述装置实施例的基础上,所述装置还可以包括:

第一创建单元,用于在所述获取单元工作之前,对所述各个模块module中每一个模块module,使用构建工具gradle为该模块module创建编译配置文件build.gradle,其中,所述编译配置文件build.gradle存放有该模块module的构建变种版本buildvariant;

其中,所述获取单元,具体可以用于:

获取所述各个模块module的构建变种版本buildvariant;

所述编译单元,具体可以用于:

利用所述各个模块module的构建变种版本buildvariant,并使用编译工具gradleplugin对所述源码进行编译,得到所述androidapp。

在前述装置实施例的基础上,所述装置还可以包括:

第二创建单元,用于在所述获取单元工作之前,对所述源码对应的每一个模块module,使用构建工具gradle为该模块module创建第一java代码文件和第一资源文件,其中,所述第一java代码文件存放有所述源码可编译出的包含有该模块module的所有androidapp包含的该模块module共有的java代码,所述第一资源文件存放有所述包含有该模块module的所有androidapp包含的该模块module共用的资源;

第三创建单元,用于对所述各个模块module中每一个包含有除所述第一java代码文件所包含的java代码外的其它java代码的模块module,使用构建工具gradle为该模块module创建第二java代码文件,对所述各个模块module中每一个使用有除所述第一资源文件所包含的资源外的其它资源的模块module,使用构建工具gradle为该模块module创建第二资源文件,其中,所述第二java代码文件存放有对应模块module包含的java代码中除所述第一java代码文件所包含的java代码外的java代码,所述第二资源文件存放有对应模块module使用的资源中除所述第一资源文件所包含的资源外的资源;

其中,所述编译单元,具体可以用于:

利用所述第一java代码文件、所述第一资源文件、所述各个模块module的构建变种版本buildvariant,以及所述第二java代码文件和所述第二资源文件,并使用编译工具gradleplugin对所述源码进行编译,得到所述androidapp。

在前述装置实施例的基础上,至少一个编译配置文件build.gradle中可以使用[flavor]compile的方式来引用其它模块module。

本实施例的组件化下利用一套源码编译多个androidapp的装置,可以用于执行前述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图3示出了本发明实施例提供的一种电子设备的实体结构示意图,如图3所示,该电子设备可以包括:处理器11、存储器12、总线13及存储在存储器12上并可在处理器11上运行的计算机程序;

其中,所述处理器11,存储器12通过所述总线13完成相互间的通信;

所述处理器11执行所述计算机程序时实现上述各方法实施例所提供的方法,例如包括:获取待编译得到的androidapp的各个模块module的编译配置数据;利用所述各个模块module的编译配置数据对所述androidapp的组件化后的源码进行编译,得到所述androidapp。

本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例所提供的方法,例如包括:获取待编译得到的androidapp的各个模块module的编译配置数据;利用所述各个模块module的编译配置数据对所述androidapp的组件化后的源码进行编译,得到所述androidapp。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。术语“上”、“下”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

本发明的说明书中,说明了大量具体细节。然而能够理解的是,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本发明公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释呈反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。本发明并不局限于任何单一的方面,也不局限于任何单一的实施例,也不局限于这些方面和/或实施例的任意组合和/或置换。而且,可以单独使用本发明的每个方面和/或实施例或者与一个或更多其他方面和/或其实施例结合使用。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。

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