如果我没有记错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依赖于assembleJava项目,它取决于:
这与“了解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任务。
您可以在此处引用完整的任务
。原始文本是buildtask,而更改后的文本是assembletask。
使用的项目:Android Sunflower GitHub
buildRelease我没有得到.apk文件,只有日志文件。但是,在运行时assembleRelease,我确实获得了.apk文件。奇。