gradle汇编和gradle构建任务之间有什么区别?

时间:2017-05-25 16:14:13

标签: android android-gradle

如果我没有错,gradle assemble会运行gradle assembleDebuggradle assembleRelease,但我相信gradle build也会这样做,那么两者之间有什么不同?< / p>

5 个答案:

答案 0 :(得分:50)

汇编将构建您的工件,构建将使用其他检查来组装您的工件。

build取决于assemble,因此buildassemble

的超集

您可以使用--dry-run标志查看将要执行的任务。 e.g。

gradlew build --dry-run

除了assemble之外,您还会看到linttest将被执行。

答案 1 :(得分:9)

关于build是否应该依赖assemble的信息存在冲突。

一方面,Understanding Gradle: the Build Lifecycle显示了任务依赖关系图,其中buildassemble是独立的: Directed acyclic graph for the Java plug-in tasks from the book Gradle Recipes for Android.

相反,Gradle user guide for Java plugin表明build依赖于assemble,至少对于Java项目而言:

Java plugin - tasks

这与“ Understanding Gradle”中的图表相矛盾。那么,也许Android插件与Java插件实现的构建/组装任务不同?或者,此行为在某些版本的Gradle中已更改。

答案 2 :(得分:3)

来自gradle tasks --all

Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.

build实际上是assemble + check(而checktest +任何整理任务)。

答案 3 :(得分:1)

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

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

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

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

答案 4 :(得分:0)

组装将构建您的工件,并且构建将通过附加检查组装您的工件。

还有哪些其他检查?我执行任务,因此您不必:

:app:lint SKIPPED       
:app:bundleDebugClasses SKIPPED     
:app:kaptGenerateStubsDebugUnitTestKotlin SKIPPED       
:app:kaptDebugUnitTestKotlin SKIPPED        
:app:compileDebugUnitTestKotlin SKIPPED     
:app:preDebugUnitTestBuild SKIPPED      
:app:javaPreCompileDebugUnitTest SKIPPED        
:app:compileDebugUnitTestJavaWithJavac SKIPPED      
:app:processDebugUnitTestJavaRes SKIPPED        
:app:testDebugUnitTest SKIPPED      
:app:bundleReleaseClasses SKIPPED       
:app:kaptGenerateStubsReleaseUnitTestKotlin SKIPPED     
:app:kaptReleaseUnitTestKotlin SKIPPED      
:app:compileReleaseUnitTestKotlin SKIPPED       
:app:preReleaseUnitTestBuild SKIPPED        
:app:javaPreCompileReleaseUnitTest SKIPPED      
:app:compileReleaseUnitTestJavaWithJavac SKIPPED        
:app:processReleaseUnitTestJavaRes SKIPPED      
:app:testReleaseUnitTest SKIPPED        
:app:test SKIPPED       
:app:check SKIPPED      
:app:build SKIPPED

如您所见,build的执行任务多于assemble。像linttestcheck任务一样。

您可以参考full tasks here 原始文本是build任务,而更改后的文本是assemble任务。

使用的项目:Android Sunflower GitHub