Gradle 子任务如何在构建任务 "assembleDebug" 中执行?

How are Gradle subtasks executed in build task "assembleDebug"?

我最近一直在学习 Android 的 Gradle 系统。我们知道,如果我们在命令行中输入“gradle tasks --all”,Gradle会打印出所有可用的任务。

我感兴趣的是任务“assembleDebug”下的子任务列表(如“bundleDebug”、“compileDebugNdk”等)。我假设它们是前面缩进的子任务。

如果我们运行“assembleDebug”任务会执行所有这些子任务吗?如果是这样,执行顺序是什么?如果没有,哪些会被拾取?

注意:下面的子任务似乎是按字典顺序列出的。所以我们不能假设它是执行顺序。

您在此处发布的输出意味着 assembleDebug 取决于此处缩进列出的其他任务。准确确定任务执行顺序的最佳方法是,您可以 运行 gradle :api:assembleDebug -m 到 "dry run" 您的构建。一般来说 "SubTask" 不是这里的常用术语。相反,我会说 assembleDebug 取决于这些任务。

首先,官方术语不是子任务,而是“任务依赖”。而关于执行顺序,官方说法是“任务排序”。请参阅 official Gradle docs,特别是标题为 任务依赖性和任务排序 的部分。它说:

A task may have dependencies on other tasks or might be scheduled to always run after another task. Gradle ensures that all task dependencies and ordering rules are honored when executing tasks, so that the task is executed after all of its dependencies and any "must run after" tasks have been executed.

其次,您可以使用 gradle --dry-run :api:assembleDebug(或 -m 作为 --dry-run 的同义词,如其他答案所建议的)。输出是根据任务排序,而不是字典顺序。

注意:注意不要混淆“依赖项”和“任务依赖项”。 “依赖项”本身是构建所需的 Java 依赖项,例如库,您可以使用 gradle api:dependencies 来查看这些依赖项。有关 Java 依赖项的详细信息,请参阅 this SO post