Wenn ich mich nicht irre gradle assemble , läuft gradle assembleDebugund gradle assembleRelease, aber ich glaube gradle buildauch das Gleiche, was sind dann die Unterschiede zwischen beiden?
Wenn ich mich nicht irre gradle assemble , läuft gradle assembleDebugund gradle assembleRelease, aber ich glaube gradle buildauch das Gleiche, was sind dann die Unterschiede zwischen beiden?
Antworten:
Assemble erstellt Ihre Artefakte und Build erstellt Ihre Artefakte mit zusätzlichen Überprüfungen.
buildhängt davon ab assemble, so buildist eine Art Obermenge vonassemble
Mit dem --dry-runFlag können Sie einen Blick auf die Aufgaben werfen, die ausgeführt werden . z.B
gradlew build --dry-run
Sie werden das abgesehen von assembleauch sehen lintund testwerden ausgeführt.
lintundtest
Von gradle tasks --all:
Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
buildist effektiv assemble+ check(und checkist test+ alle Flusenaufgaben).
Es ist wahr, dass gradle taskses so aussieht, als wäre das buildeine Obermenge von assemble, einschließlich Tests. Aber (!) Aus meiner kurzen Erfahrung sieht es wirklich so aus, als wäre das nicht der Fall.
Also habe ich diese beiden Befehle in der Befehlszeile mit dem Gradle-Wrapper mit dem Flag --scan ausgeführt, nachdem ich jedes Mal sauber ausgeführt habe. Dies ist der Vergleich:
assembleDebugich alle erstellten Dateien erhalten - *.apkund *.aarDateien.buildDebugich keine dieser Dateien.assembleDebug - 109 AufgabenbuildDebug - 91 AufgabenassembleDebug - 172 aus 20 KonfigurationenbuildDebug - 104 aus 18 KonfigurationenassembleDebug2 meiner 3 Unterprojekte (Java-Bibliotheken, keine App) eine weitere Konfiguration gibt, die aufgerufen wird lintClassPath. Diese Konfiguration fehlt in buildDebug.buildDebugkeine assembleDebugAufgabe aufgerufen und assembleDebugkeine buildDebugAufgaben aufgerufen .Build -> Make Project) in meinem Scan sehe, dass der tatsächlich ausgeführte Befehl der war assembleDebug. Genauer gesagt lief es :app:assembleDebug.Wie Sie sehen, verstehe ich die Unterschiede selbst nicht wirklich, aber das habe ich herausgefunden. Wenn jemand es mir und den anderen Benutzern, die hier lesen, erklären kann, könnte es großartig sein :) Danke!
Es gibt widersprüchliche Informationen darüber, ob builddavon abhängen soll assemble.
Auf der einen Seite zeigt Gradle verstehen: Der Build-Lebenszyklus zeigt eine grafische Darstellung der Aufgabenabhängigkeiten, von denen buildund assembleunabhängig sind:

Im Gegensatz dazu zeigt das Gradle-Benutzerhandbuch für das Java-Plugin , dass dies zumindest für Java-Projekte von Folgendembuild abhängt assemble:
Dies widerspricht der Grafik aus "Gradle verstehen". Vielleicht implementiert das Android-Plugin Build / Assemble-Aufgaben anders als das Java-Plugin? Oder dieses Verhalten hat sich in einer Version von Gradle geändert.
Assemble erstellt Ihre Artefakte und Build erstellt Ihre Artefakte mit zusätzlichen Überprüfungen.
Welche zusätzlichen Schecks? Ich führe die Aufgaben aus, damit Sie nicht:
: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
Wie Sie sehen können, werden buildmehr Aufgaben ausgeführt als assemble. Wie lint, testund checkAufgaben.
Sie können die vollständigen Aufgaben hier referenzieren.
Der ursprüngliche Text ist eine buildAufgabe, während der geänderte Text eine assembleAufgabe ist.
Verwendetes Projekt: Android Sunflower GitHub
buildReleaseerhalte ich nicht die.apkDateien, sondern nur die Protokolldateien. Beim Ausführen bekommeassembleReleaseich jedoch die.apkDateien. Seltsam.