Wenn ich mich nicht irre gradle assemble
läuft gradle assembleDebug
und gradle assembleRelease
aber ich glaube gradle build
macht auch das gleiche, also was sind die Unterschiede zwischen den beiden?
Was sind die Unterschiede zwischen Gradle-Montage- und Gradle-Build-Aufgaben?
Bescheidener Student
David Medenjak
assemble
wird Ihre Artefakte bauen, und build
wird Ihre Artefakte mit zusätzlichen Prüfungen zusammenstellen.
build
kommt drauf an assemble
Also build
ist eine Art Obermenge von assemble
Sie können sich die Aufgaben ansehen, die ausgeführt werden, indem Sie die verwenden --dry-run
Flagge. z.B
gradlew build --dry-run
Sie werden das abgesehen davon sehen assemble
Auch lint
und test
wird durchgeführt.
-
Danke für die Antwort. Ich glaube, dass das Ausführen mit –dry-run der Weg ist, um weitere Unverständnis zu haben
– Bescheidener Student
25. Mai 2017 um 16:31 Uhr
-
@AjayS
lint
undtest
– David Medenjak
9. September 2017 um 13:56 Uhr
-
Aus meiner letzten Erfahrung ist diese Antwort falsch. Wenn ich AssembleRelease ausführe, erhalte ich die Ausgabe apk. Wenn ich buildRelease ausführe, wird keine apk generiert. Außerdem führe ich beide Aufgaben mit –dry-run aus, wie oben vorgeschlagen, und es scheint, dass build nicht darunter ausgeführt wird.
– Reiter im Sturm
12. März 2019 um 17:23 Uhr
-
Ich frage mich, ob das Android-Plugin Build/Assemble anders implementiert als das Java-Plugin. Ich habe gerade eine Antwort auf diese Frage gepostet, die zwei widersprüchliche Diagramme zeigt. Aber der eine diskutiert Android und der andere Java.
– Colin D. Bennett
18. Mai 2020 um 20:27 Uhr
-
also macht ‘assemble’ einen Build und ‘build’ macht einen Assemble? Das macht keinen Sinn
– John Ktejik
24. November 2020 um 13:54 Uhr
Aus gradle tasks --all
:
Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
build
ist effektiv assemble
+ check
(und check
ist test
+ alle Linting-Aufgaben).
-
Ich habe es gerade hier auf Gradle 6.8.2 und getestet
build
lief keinecheck
. Tatsächlich war es fast die gleiche Zeit wieassemble
.build
dabei 105 Aufgaben ausgeführtassemble
108 Aufgaben ausgeführt.– Dielson-Vertrieb
30. April 2021 um 15:29 Uhr
-
@DielsonSales Versuchen Sie es mit github.com/dorongold/gradle-task-tree um zu sehen, wozu das Aufgabendiagramm dient
build
sieht aus wie. Vielleicht ändert Ihre Build-Konfiguration etwas, aber normalerweisebuild
ist buchstäblichassemble
+check
.– Laurence Gonsalves
30. April 2021 um 17:26 Uhr
-
Sieht so aus, als ob Gradle-Task-Tree nicht mit Gradle 6.8 oder höher funktioniert. Sie können es mit Gradle 6.7.1 versuchen, vorausgesetzt, Ihr Build ist mit dieser Version kompatibel.
– Laurence Gonsalves
30. April 2021 um 17:30 Uhr
Es stimmt, dass gem gradle tasks
es sieht aus wie die build
ist eine Obermenge von assemble
, einschließlich Prüfungen. Aber (!) nach meiner kurzen Erfahrung sieht es wirklich so aus, als wäre es 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 hatte. Das ist der Vergleich:
- Gewünschte gebaute Dateien:
- Nach dem Rennen
assembleDebug
Ich habe alle gebauten Dateien, die ich wollte –*.apk
und*.aar
Dateien. - Nach dem Rennen
buildDebug
Ich hatte keine dieser Dateien.
- Nach dem Rennen
- Anzahl der Aufgaben, die gemäß den Scans ausgeführt wurden:
assembleDebug
– 109 AufgabenbuildDebug
– 91 Aufgaben
- Anzahl der Abhängigkeiten laut Scan:
assembleDebug
– 172 aus 20 KonfigurationenbuildDebug
– 104 aus 18 Konfigurationen- Es scheint, als ob der Grund, warum sie sich unterscheiden, darin besteht, dass in
assembleDebug
In 2 meiner 3 Unterprojekte (die Java-Bibliotheken sind, keine App) gibt es eine weitere Konfiguration namenslintClassPath
. Diese Konfiguration fehlt inbuildDebug
.
- Ein weiterer zu erwähnender Punkt ist, dass es so aussah, als ich in der Aufgabenliste suchte
buildDebug
hat nicht angerufenassembleDebug
Aufgabe uassembleDebug
hat nicht angerufenbuildDebug
Aufgaben. - Und die letzte interessante Sache, die in diesem Zusammenhang zu erwähnen ist, ist, dass, als ich Build aus dem Android Studio (
Build -> Make Project
), sehe ich in meinem Scan, dass der Befehl, der tatsächlich ausgeführt wurde, der warassembleDebug
. Genauer gesagt lief es:app:assembleDebug
.
Wie Sie sehen können, verstehe ich die Unterschiede selbst nicht wirklich, aber das ist, was ich herausgefunden habe. Wenn jemand es mir und den anderen Benutzern, die hier lesen, erklären kann, könnte es großartig sein 🙂 Danke!
-
AFAIK hat der Build-Prozess einen Cache-Mechanismus. Aus diesem Grund sehen Sie mit dem Build-Befehl weniger Aufgaben. docs.gradle.org/current/userguide/build_cache.html
– Maor Hadad
4. Mai 2021 um 11:40 Uhr
Es gibt widersprüchliche Angaben darüber, ob build
soll abhängen assemble
.
Auf der einen Seite, Gradle verstehen: der Build-Lebenszyklus zeigt ein Diagramm der Aufgabenabhängigkeiten von wo build
und assemble
unabhängig sind:
Im Gegensatz dazu die Gradle-Benutzerhandbuch für das Java-Plugin zeigt, dass build
kommt drauf an assemble
zumindest für Java-Projekte:
Dies widerspricht der Grafik aus “Understanding Gradle”. Vielleicht implementiert das Android-Plug-in Build-/Assemble-Aufgaben anders als das Java-Plug-in? Oder dieses Verhalten hat sich in einer Version von Gradle geändert.
Assemble baut deine Artefakte und Build baut deine Artefakte mit zusätzlichen Prüfungen zusammen.
Welche zusätzlichen Kontrollen? Ich führe die Aufgaben aus, damit Sie Folgendes nicht tun müssen:
: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 du sehen kannst, build
führt mehr Aufgaben aus als assemble
. Wie lint
, test
und check
Aufgaben.
Sie können die beziehen volle Aufgaben hier
Der Originaltext ist build
Aufgabe, während der geänderte Text ist assemble
Aufgabe.
Verwendetes Projekt: Android Sunflower GitHub
mikolajbe
Es gibt ein großartiges Plugin, das Abhängigkeiten zwischen Aufgaben visualisiert:
https://plugins.gradle.org/plugin/org.barfuin.gradle.taskinfo
Nachdem Sie es zu Ihrem Projekt hinzugefügt haben, führen Sie zB ./gradlew tiTree build
Mehr in diesem Artikel: https://tomgregory.com/all-about-the-gradle-task-graph/
Wenn ich laufe
buildRelease
Ich verstehe die nicht.apk
Dateien, nur die Protokolldateien. Allerdings beim LaufenassembleRelease
ICH tun bekommen das.apk
Dateien. Seltsam.– Joshua Pinter
3. Juli 2019 um 15:57 Uhr
Und
assemble
scheint immer eine minimale Zeit zu dauern, sagen wir 10 Sekunden, währendbuild
läuft so schnell wie 1s, wenn es keine Codeänderung gibt.– Dielson-Vertrieb
30. April 2021 um 15:44 Uhr