如果我没有记错gradle assemble
,运行gradle assembleDebug
和gradle assembleRelease
,但是我相信gradle build
也一样,那么两者之间有何不同?
Answers:
组装将构建您的工件,并且构建将通过附加检查来组装您的工件。
build
取决于assemble
,所以build
是的超集assemble
您可以使用该--dry-run
标志查看将要执行的任务。例如
gradlew build --dry-run
你会看到,除了assemble
还lint
与test
将被执行。
lint
和test
来自gradle tasks --all
:
Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
build
是有效的assemble
+ check
(并且check
是test
+任何皮棉任务)。
的确,根据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库,而不是app)中,有两个配置叫做lintClassPath
。中缺少此配置buildDebug
。buildDebug
没有调用assembleDebug
任务,assembleDebug
也没有调用buildDebug
任务。Build -> Make Project
)运行构建时,我在扫描中看到实际运行的命令是assembleDebug
。更具体地说,它运行了:app:assembleDebug
。如您所见,我自己并不是很了解这些差异,但这就是我发现的。如果有人可以向我和其他在这里阅读的用户解释它,那可能会很棒:)谢谢!
关于是否build
应该依赖的信息存在冲突assemble
。
一方面,《理解Gradle:构建生命周期》显示了一个任务依赖关系图,这些任务依赖于build
和assemble
相互独立:
相比之下,Gradle Java插件用户指南显示至少build
依赖于assemble
Java项目,它取决于:
这与“了解Gradle”中的图相矛盾。那么,也许Android插件与Java插件实现的构建/组装任务不同?或者,此行为在某些版本的Gradle中已更改。
组装将构建您的工件,并且构建将通过附加检查来组装您的工件。
还有哪些其他检查?我运行任务,因此您不必:
: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
任务。
您可以在此处引用完整的任务
。原始文本是build
task,而更改后的文本是assemble
task。
使用的项目:Android Sunflower GitHub
buildRelease
我没有得到.apk
文件,只有日志文件。但是,在运行时assembleRelease
,我确实获得了.apk
文件。奇。