一种Android客户端项目下多个模块单独发布AAR的实现方法与流程

文档序号:16400301发布日期:2018-12-25 20:05阅读:1013来源:国知局

本发明涉及手机技术领域,尤其涉及android客户端项目下多个模块单独发布aar的实现方法。

背景技术

gradle是一个基于jvm的富有突破性构建工具。gradle正迅速成为许多开源项目和前沿企业构建系统的选择,同时也在挑战遗留的自动化构建项目。本教程主要讲解了如何使用gradle构建系统和构建系统过程中涉及的插件。

现有技术中,基于gradle脚本用于androidstudio下打包及发布aar到maven私服库上。有一种使用gradle脚本的dsl(领域特定语言)中的uploadarchives闭包可以实现每个模块单独发布,它将读取源代码和资源目录生成aar文件,并将dsl中的dependencies所依赖的库构建成pom文件。另一种方案是使用dsl的publishing闭包,由它生成的publishtask(任务)依赖生成aar的task将生成的aar文件发布到私服库中,这种生成不包含dependecies的依赖库。

第一种使用uploadarchives闭包的方案,由于会包含所有的dependencies依赖库会有以下几种问题:

1.如果模块下包含aar文件,生成的pom文件也会包含aar的依赖,开发者使用这种依赖会导致编译不过。

2.即使不包含aar文件,dependencies中也可以用provided代替compile来避免上传不必要的依赖,但是对于某些特定的库,执行uploadarchives也会出现编译出错,找不到某些资源或类。

第二种publishing闭包在项目中只有单个module(模块)发布情况下可以满足需求,但是对于要发布多个模块,根据官方文档所述,会把每个模块的publishtask都执行一遍,对于只发布一个module的aar文件却把所有包含publishing的module都执行一遍,非常浪费时间。



技术实现要素:

本发明是为了对于上传私有maven服务器,针对一个项目下多个可打包发布的模块的情况,可以做到对任意模块发布互不影响,同时生成的pom文件不包含dependencies的依赖库,可解决开发者由于依赖混乱造成编译问题。

本发明所述的一种android客户端项目下多个模块单独发布aar的实现方法,包括以下步骤:

1)提供一android客户端项目,所述android客户端项目至少包括第一模块和第二模块,所述第一模块和所述第二模块均包含第一任务;

2)当编译gradle生成aar包时,指定仅编译第二模块的第一任务;

3)将仅包含第二模块的第一任务的aar包发布到maven服务器。

优选地,所述maven服务器接收本地发送来的待编译第二模块的第一任务,并对第二模块的第一任务编译,若编译成功则将第二模块的第一任务汇总至所述maven服务器存储的待发布应用中,若编译失败则发出提示;所述maven服务器每隔一第一时间段对所述待发布应用进行编译,并在编译失败时发出提示;所述maven服务器判断是否需要发布所述待发布应用,并在需要发布时对所述待发布应用进行编译,若编译成功则发布所述待发布应用,若编译失败则发出提示。

优选地,所述maven服务器所述第二模块的第一任务编译成功后,将所述第二模块的第一任务所述第二模块的第一任务的块名与所述待发布应用中的代码单元的单元名进行匹配,若匹配成功则利用第二模块的第一任务替换相匹配的代码单元,若匹配失败则第二模块的第一任务添加至所述待发布应用中。

优选地,所述maven服务器在接收所述第二模块的第一任务的同时记录接收所述第二模块的第一任务的时间。

优选地,所述maven服务器在需要发布时,判断当前时间至最近一次编译所述待发布应用的时间内是否接收到所述第二模块的第一任务,若是则对所述待发布应用进行编译,若否则发布所述待发布应用。

优选地,所述maven服务器在编译失败时分析编译失败的原因、位置以及所述位置处代码所在的代码单元对应的单元名。

优选地,所述maven服务器统计第二时间段内编译失败的次数、位置以及所述位置处代码所在的代码单元的责任人,并生成报表。

具体实施方式

下面结合具体实施方式对本发明做进一步描述。

本发明所述的技术方案是在现有的第二种方案的基础上更新优化所得。第二种方案虽然官方文档指出如果一个项目包含多个publishing闭包gradle会把所有的执行一遍,但是根据gradle特性,定义的task可以指明其当前属于哪个模块。例如在projectsample中包含两个modulea和b。每个模块都定义一个taskclear。直接执行gradleclear方法会把modulea、b的clear都执行一遍。但指定其所属模块就可以只执行一个clear方法,例如:gradle:a:clear。这样只执行modulea中的clear方法。本方案依据这个原理,定义一个task,它依赖于publishing生成的publishtask,然后指定publish所属的模块。这样执行自定义的task就会只发布当前模块的aar文件到私有maven服务器。

在本发明的一个较佳实施例中,在一个androidproject—tuyasmart_push项目,包含三个module,push管理模块pushmanager,fcm模块fcm_push,umeng模块umeng_push。在fcm的build.gradle中:

在umeng_push模块中:

umeng_push模块中生成aar和发布maven的task一致,但是在定义空task时命名不同,依赖的模块不同,这样可以分别发布不受干扰。

以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。

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