如果我没有错,gradle assemble
会运行gradle assembleDebug
和gradle assembleRelease
,但我相信gradle build
也会这样做,那么两者之间有什么不同?< / p>
答案 0 :(得分:50)
汇编将构建您的工件,构建将使用其他检查来组装您的工件。
build
取决于assemble
,因此build
是assemble
您可以使用--dry-run
标志查看将要执行的任务。 e.g。
gradlew build --dry-run
除了assemble
之外,您还会看到lint
和test
将被执行。
答案 1 :(得分:9)
关于build
是否应该依赖assemble
的信息存在冲突。
一方面,Understanding Gradle: the Build Lifecycle显示了任务依赖关系图,其中build
和assemble
是独立的:
相反,Gradle user guide for Java plugin表明build
依赖于assemble
,至少对于Java项目而言:
这与“ 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
(而check
是test
+任何整理任务)。
答案 3 :(得分:1)
的确,根据gradle tasks
,看来build
是assemble
的超集,包括测试。
但是(!)从我的短暂经验来看,事实并非如此。
因此,每次干净运行后,我都使用带有--scan标志的gradle包装器在命令行中运行了这2条命令。 这是比较:
assembleDebug
后,我得到了所有想要的构建文件-*.apk
和*.aar
文件。buildDebug
之后,我没有任何这些文件。assembleDebug
-109个任务buildDebug
-91个任务assembleDebug
-172(来自20种配置)buildDebug
-来自18种配置的104 assembleDebug
中有3个子项目中的2个(它们是Java库,不是应用程序),还有一个配置,称为lintClassPath
。 buildDebug
中缺少此配置。buildDebug
没有调用assembleDebug
任务并且assembleDebug
没有调用buildDebug
任务。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
。像lint
,test
和check
任务一样。
您可以参考full tasks here
原始文本是build
任务,而更改后的文本是assemble
任务。
使用的项目:Android Sunflower GitHub