android gradle Between tasks without declaring an explicit or implicit dependency

进行gradle编译android项目时。输出日志
在这里插入图片描述
任务 :app:compileDebugKotlin 与 :app:greendao 两个任务存在隐形依赖关系。

但是声明的依赖关系如下图所示:
在这里插入图片描述
是完全符合greendao 官方文档的方式声明的。

但是项目编译期间输出日志 两个task 存在隐形依赖关系。

存在这个问题带来的影响是:
:app:compileDebugKotlin 任务执行优化被禁用。会严重拖慢gradle编译速度。

解决方式:
在这里插入图片描述
在 app模块下的build.gradle 文件中。与dependencies 平级 添加如下代码:

project.afterEvaluate{
    getTasksByName("compileDebugKotlin",false).each {
        it.mustRunAfter("greendao")
//        it.dependsOn("greendao")
    }
}

可解决:app:compileDebugKotlin 与 :app:greendao 两个任务存在隐形依赖关系的问题。

复盘解决该问题的流程:
1 熟悉整个 Gradle 生命周期的流程,从而知道在那个gradle生命周期解决入手

参考链接:
https://blog.csdn.net/cpcpcp123/article/details/127836230

2 找到:app:compileDebugKotlin 和 :app:greendao 两个task在哪里执行。

3 两个task 前面都有“:app” 说明是属于app模块下的任务。

4 依据我们对项目业务的分析可知,在执行:app:compileDebugKotlin task前,必须要先执行:app:greendao。

5 从第一步可知,在gradle 配置阶段我们可主动干预两个task的执行顺序。
在这里插入图片描述
6 最终得出解决方案

project.afterEvaluate{
    getTasksByName("compileDebugKotlin",false).each {
        it.mustRunAfter("greendao")
//        it.dependsOn("greendao")
    }
}

我们使用mustRunAfter 而不用 dependsOn 。目的是为了降低task之间的耦合性。感兴趣的同学可以自行搜索两个api的差异。

我们举一反三下:
不局限于具体某两个任务存在隐形依赖 可以用这种思路解决。我们要任何两个task之间存在隐形依赖关系,都可用这种思路去排查解决

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值