gradle汇编和gradle build taks之间的区别是什么?

Hum*_*ent 50 android android-gradle-plugin

如果我没看错的gradle assemble不运行gradle assembleDebuggradle assembleRelease,但我相信gradle build也不会是相同的,所以是什么他们两个之间有什么不同?

Dav*_*jak 69

Assemble会构建你的工件,build会用额外的检查来组装你的工件.

build取决于assemble,所以build是一种超集assemble

您可以查看将使用该--dry-run标志执行的任务.例如

gradlew build --dry-run
Run Code Online (Sandbox Code Playgroud)

你会看到,除了assemblelinttest将被执行.

  • 根据我上次的经验,这个答案是错误的。当我运行 assembleRelease 时,我得到输出 apk。当我运行 buildRelease 时,没有生成任何 apk。此外,我使用 --dry-run 运行这两个任务,如上所述,似乎构建没有在下面运行 assemble 。 (5认同)
  • 所以“组装”进行构建,而“构建”进行组装?这是没有意义的 (5认同)
  • 谢谢你的回答.我相信用--dry-run运行是继续进行任何进一步发展的方法 (3认同)
  • @AjayS`lint`和`test` (3认同)

Col*_*ett 14

关于是否build应该依赖于存在矛盾的信息assemble

一方面,Understanding Gradle: the Build Lifecycle显示了任务依赖关系图,从哪里开始build,从哪里assemble独立: 来自 Gradle Recipes for Android 一书中的 Java 插件任务的有向无环图。

相比之下,Java 插件Gradle 用户指南显示build依赖于assemble,至少对于 Java 项目:

Java 插件 - 任务

这与“了解 Gradle”中的图表相矛盾。那么也许 Android 插件实现的构建/组装任务与 Java 插件不同?或者,这种行为在某些版本的 Gradle 中发生了变化。


Lau*_*ves 6

来自gradle tasks --all

Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
Run Code Online (Sandbox Code Playgroud)

build是有效的assemble+ check(并且checktest+任何皮棉任务)。


小智 5

的确,根据gradle tasks它看起来build是的超集assemble,包括测试。但是(!)从我的短暂经验来看,事实并非如此。

因此,每次运行干净后,我都使用带有--scan标志的gradle包装器在命令行中运行了这2条命令。这是比较:

  1. 所需的构建文件:
    • 运行后,assembleDebug我得到了所有想要的构建文件- *.apk*.aar文件。
    • 运行后,buildDebug我没有任何这些文件。
  2. 根据扫描运行的任务数量:
    • assembleDebug -109个任务
    • buildDebug -91项任务
  3. 根据扫描的依赖项数量:
    • assembleDebug -172(来自20种配置)
    • buildDebug -18种配置中的104种
    • 看来它们之所以不同,是因为在assembleDebug我的3个子项目中的2个(它们是Java库,而不是app)中,有两个配置叫做lintClassPath。中缺少此配置buildDebug
  4. 值得一提的是,当我在任务列表中进行搜索时,似乎buildDebug没有调用assembleDebug任务,assembleDebug也没有调用buildDebug任务。
  5. 在这种情况下要提到的最后一个有趣的事情是,当我从Android Studio(Build -> Make Project)运行构建时,我在扫描中看到实际运行的命令是assembleDebug。更具体地说,它运行了:app:assembleDebug

如您所见,我本人并不真正了解这些差异,但这就是我发现的。如果有人可以向我和其他在这里阅读的用户解释它,那可能会很棒:)谢谢!

  • AFAIK 构建过程有一个缓存机制。这就是为什么您使用构建命令看到的任务较少。https://docs.gradle.org/current/userguide/build_cache.html (5认同)