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

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

背景技术:

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

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

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

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

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

第二种publishing闭包在项目中只有单个module(模块)发布情况下可以 满足需求,但是对于要发布多个模块,根据官方文档所述,会把每个模块的 publish task都执行一遍,对于只发布一个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可以指明其当前属于哪个 模块。例如在project Sample中包含两个module A和B。每个模块都定义一个task clear。直接执行gradle clear方法会把module A、B的clear都执行一遍。但指定 其所属模块就可以只执行一个clear方法,例如:gradle:A:clear。这样只执行 module A中的clear方法。本方案依据这个原理,定义一个task,它依赖于 publishing生成的publish task,然后指定publish所属的模块。这样执行自定义 的task就会只发布当前模块的aar文件到私有maven服务器。

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

在umeng_push模块中:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值