进行gradle编译android项目时。输出日志
图1
任务 :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之间存在隐形依赖关系,都可用这种思路去排查解决