Was sind die Unterschiede zwischen Gradle-Montage- und Gradle-Build-Aufgaben?

Lesezeit: 5 Minuten

Benutzer-Avatar
Bescheidener Student

Wenn ich mich nicht irre gradle assemble läuft gradle assembleDebug und gradle assembleReleaseaber ich glaube gradle build macht auch das gleiche, also was sind die Unterschiede zwischen den beiden?

  • Wenn ich laufe buildRelease Ich verstehe die nicht .apk Dateien, nur die Protokolldateien. Allerdings beim Laufen assembleReleaseICH 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ährend build läuft so schnell wie 1s, wenn es keine Codeänderung gibt.

    – Dielson-Vertrieb

    30. April 2021 um 15:44 Uhr


Benutzer-Avatar
David Medenjak

assemble wird Ihre Artefakte bauen, und build wird Ihre Artefakte mit zusätzlichen Prüfungen zusammenstellen.

build kommt drauf an assembleAlso 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 und test

    – 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 keine check. Tatsächlich war es fast die gleiche Zeit wie assemble. build dabei 105 Aufgaben ausgeführt assemble 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 normalerweise build ist buchstäblich assemble + 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:

  1. 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.
  2. Anzahl der Aufgaben, die gemäß den Scans ausgeführt wurden:
    • assembleDebug – 109 Aufgaben
    • buildDebug – 91 Aufgaben
  3. Anzahl der Abhängigkeiten laut Scan:
    • assembleDebug – 172 aus 20 Konfigurationen
    • buildDebug – 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 namens lintClassPath. Diese Konfiguration fehlt in buildDebug.
  4. Ein weiterer zu erwähnender Punkt ist, dass es so aussah, als ich in der Aufgabenliste suchte buildDebug hat nicht angerufen assembleDebug Aufgabe u assembleDebug hat nicht angerufen buildDebug Aufgaben.
  5. 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 war assembleDebug. 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!

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:
Gerichteter azyklischer Graph für die Java-Plug-in-Aufgaben aus dem Buch Gradle Recipes for Android.

Im Gegensatz dazu die Gradle-Benutzerhandbuch für das Java-Plugin zeigt, dass build kommt drauf an assemblezumindest für Java-Projekte:

Java-Plugin - Aufgaben

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, testund 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

Benutzer-Avatar
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/

1333500cookie-checkWas sind die Unterschiede zwischen Gradle-Montage- und Gradle-Build-Aufgaben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy