Was ist Gradle in Android Studio?


1313

Gradle ist ein bisschen verwirrend für mich und auch für jeden neuen Android-Entwickler. Kann jemand erklären, was Gradle in Android Studio ist und wozu es dient? Warum ist es in Android Studio enthalten?



14
In diesem Beitrag von Jeff Atwood erfahren Sie, warum Sie ein Build-Tool wie Gradle benötigen.
Adam S

829
Wenn hier jemand eine Frage stellt, die ja viele Links in Google enthält, bittet er wirklich darum, dass jemand die Frage im Klartext beantwortet und in einen Kontext stellt , z. B. warum wir sie brauchen Wer es am häufigsten verwenden wird, muss es wissen, um Android-Apps in Android Studio usw. zu erstellen. Da die Links, die Sie bei Google darüber finden, meistens "tech-speak" sind und für Anfänger verwirrend ist.
Azurespot

3
@NoniA. Genau meine Gedanken. Ich bin immer noch ein wenig verwirrt. Ist Gradle nur der Hintergrundprozess, der den von mir geschriebenen Code kompiliert? Nachdem sie sich viele andere Antworten angesehen haben, erwähnen sie auch Abhängigkeiten. Was sind diese? Vielen Dank!

Vielleicht sehen Sie sich hier eine kurze und nette Erklärung an .
Sehr

Antworten:


1531

Kurze Antwort

Gradle ist ein Build-System.

Lange Antwort

Vor Android Studio haben Sie Eclipse für Ihre Entwicklungszwecke verwendet, und wahrscheinlich wussten Sie nicht, wie Sie Ihre Android-APK ohne Eclipse erstellen können.

Sie können dies in der Befehlszeile tun, müssen jedoch lernen, was jedes Tool (dx, aapt) im SDK tut. Eclipse hat uns alle vor diesen niedrigen, aber wichtigen, grundlegenden Details bewahrt, indem es uns ein eigenes Build-System gegeben hat.

Haben Sie sich jemals gefragt, warum sich der resOrdner im selben Verzeichnis wie Ihr srcOrdner befindet?

Hier kommt das Build-System ins Spiel. Das Build-System nimmt automatisch alle Quelldateien ( .javaoder .xml), wendet dann das entsprechende Tool an (z. B. nimmt javaKlassendateien und konvertiert sie in dexDateien) und gruppiert sie alle in einer komprimierten Datei, unserer geliebten APK.

Dieses Build-System verwendet einige Konventionen: Ein Beispiel hierfür ist die Angabe des Verzeichnisses mit den Quelldateien (in Eclipse ist es ein \srcOrdner) oder den Ressourcendateien (in Eclipse ist es ein \resOrdner).

Um all diese Aufgaben zu automatisieren, muss ein Skript vorhanden sein. Sie können Ihr eigenes Build-System mithilfe von Shell-Skripten unter Linux oder Batch-Dateien in Windows schreiben. Ich habs?

Gradle ist ein weiteres Build-System , das die besten Funktionen anderer Build-Systeme nutzt und zu einem kombiniert. Es wird aufgrund ihrer Mängel verbessert. Es ist ein JVM-basiertes Build-System . Das bedeutet, dass Sie Ihr eigenes Skript in Java schreiben können, das Android Studio verwendet.

Eine coole Sache bei gradle ist, dass es sich um ein Plugin-basiertes System handelt . Das heißt, wenn Sie Ihre eigene Programmiersprache haben und die Aufgabe des Erstellens eines Pakets (Ausgabe wie eine JAR für Java) aus Quellen automatisieren möchten, können Sie ein vollständiges Plugin in Java oder Groovy (oder Kotlin, siehe hier ) und schreiben Verteile es an den Rest der Welt.

Warum hat Google es verwendet?

Google erkannte eines der fortschrittlichsten Build-Systeme auf dem Markt und erkannte, dass Sie eigene Skripte mit wenig bis gar keiner Lernkurve schreiben können, ohne Groovy oder eine andere neue Sprache zu lernen. Also haben sie das Android-Plugin für Gradle geschrieben.

Sie müssen build.gradleDateien in Ihrem Projekt gesehen haben. Hier können Sie Skripte schreiben, um Ihre Aufgaben zu automatisieren. Der Code, den Sie in diesen Dateien gesehen haben, ist Groovy-Code. Wenn Sie schreiben System.out.println("Hello Gradle!");, wird es auf Ihrer Konsole gedruckt.

Was können Sie in einem Build-Skript tun?

Ein einfaches Beispiel ist, dass Sie einige Dateien von einem Verzeichnis in ein anderes kopieren müssen, bevor der eigentliche Erstellungsprozess stattfindet. Ein Gradle-Build-Skript kann dies tun.


11
Ich muss sagen, dass Gradle mir Probleme bereitete, als ich ein AndroidStudio-Projekt von einem Ort zum anderen brachte. Nicht übereinstimmende Versionen, fehlende Module, so weiter ... es hat mir schwer gemacht. Am Ende habe ich das Projektskelett neu erstellt und die Codeteile ausgeschnitten / eingefügt, die vom alten zum neuen Projekt gehörten. Und dies ist unter Windows sowohl für Quellen als auch für Ziele. Ich werde es jetzt unter ein Linux-basiertes Labor verschieben.
jfmessier

21
Was ich nicht verstehe, ist, warum gradle versucht, für jedes einzelne Projekt, das ich mache, oder sogar jedes Mal, wenn ich kompilieren möchte, eine Verbindung zum Internet
herzustellen

4
Ich dachte, IntelliJ wusste bereits, wie man Android-Projekte erstellt, ohne dass ein anderes Build-System erforderlich ist.
Arne Evertsson

17
Ein weiterer wichtiger Vorteil von gradle gegenüber den Build-Systemen vor Android Studio ist das Abhängigkeitsmanagement. Um eine Android-Bibliothek in einem Projekt verwenden zu können, musste der Quellcode heruntergeladen, zu Ihrem Projekt hinzugefügt und mit Ihrem Projekt kompiliert werden. Stattdessen kann man mit gradle eine einzelne Zeile zum build.gradle hinzufügen, und gradle lädt dann die kompilierte Bibliothek aus einem öffentlichen Repository herunter und fügt sie Ihrem Projekt hinzu. Einige Beispiele: blog.teamtreehouse.com/android-libraries-use-every-project Dies funktioniert auch für Standard-Java-JAR-Dateien, anstatt sie in das lib-Verzeichnis zu stellen.
Stan Kurdziel

4
Gradle ist ein schreckliches Build-System. Bei der Verwendung von Android Studio möchte ich, dass es sich um den Build kümmert. Ich verstehe nicht, warum das Hinzufügen einiger Klassen Gradle dazu zwingt, eine Synchronisierung durchzuführen, bevor dies nützlich sein kann. Im Vergleich dazu ist die Arbeit mit Visual Studio fantastisch (oder sogar X-Code) - es werden keine beschissenen Extras benötigt. Die IDE erstellt das Projekt und die Lösung, ohne in zufälligen Dateien nach Einstellungen suchen zu müssen, die der Android-Erstellungsprozess manchmal oder durch Aktualisierungen alter Projekte benötigt. Gradle ist der schlechteste Teil des Android-Erlebnisses.
Schmied

162

Es ist das neue Build-Tool, das Google für Android verwenden möchte. Es wird verwendet, weil es erweiterbarer und nützlicher als Ameise ist. Es soll die Entwicklererfahrung verbessern.

Hier können Sie einen Vortrag von Xavier Ducrohet vom Android Developer Team auf Google I / O ansehen .

Es gibt auch einen weiteren Vortrag über Android Studio von Xavier und Tor Norbye, ebenfalls während Google I / O hier .


4
Ich dachte, IntelliJ wusste bereits, wie man Android-Projekte erstellt, ohne dass ein anderes Build-System erforderlich ist.
Arne Evertsson

1
Ist gradle also nur der Hintergrundprozess, der den von mir geschriebenen Code kompiliert? Nachdem sie sich viele andere Antworten angesehen haben, erwähnen sie auch Abhängigkeiten. Was sind diese? Vielen Dank Daniel!

2
@ user5562706 Der Code wird nicht kompiliert, aber er ist dafür verantwortlich, die ausführbare Datei aufzurufen, die Ihren Code kompiliert. Nachdem Sie Ihren Code kompiliert haben, kann er eine andere Aufgabe ausführen, um ihn zu verpacken, eine andere, um ihn in ein Verzeichnis Ihrer Wahl zu kopieren, und möglicherweise eine andere, um ihn irgendwo auf einen Server hochzuladen ... Es sind diese Arten von Aufgaben, die Gradle oder ein beliebiger Build System, wird tun.
Michael Berry

63

Gradle ist ein Build-System, das unter Android Studio ausgeführt wird .

In anderen Sprachen zum Beispiel:


23
Als Sie sagten, Gradleist ähnlich make, ich habe gerade sein Konzept
user3405291

3
PHING von PHP
Yousha Aleayoub

15
Eine der schnellsten Möglichkeiten, um herauszufinden, was ein unbekanntes Tool tut und wo es in die Pipeline fällt, besteht darin, den Namen des Tools und "vs" in Google einzugeben. Die Ergebnisse zeigen normalerweise "X vs Y", wobei Y ein anderes Werkzeug ist, mit dem Sie vielleicht besser vertraut sind.
James Kuang

Webpack für Javascript
Codepig

47

Hier finden Sie eine detaillierte Erklärung, was es Gradleist und wie es in Android Studio verwendet wird.

Erkunden der Gradle-Dateien

  1. Wenn Sie ein Projekt in Android Studio erstellen, generiert das Build-System automatisch alle erforderlichen Gradle-Build-Dateien.

Gradle Build-Dateien

  1. Gradle-Build-Dateien verwenden a Domain Specific Language or DSL, um eine benutzerdefinierte Build-Logik zu definieren und mit den Android-spezifischen Elementen des Android-Plugins für Gradle zu interagieren.

  2. Android Studio-Projekte bestehen aus einem oder mehreren Modulen. Dies sind Komponenten, die Sie unabhängig voneinander erstellen, testen und debuggen können. Jedes Modul verfügt über eine eigene Build-Datei, sodass jedes Android Studio-Projekt zwei Arten von Gradle-Build-Dateien enthält.

  3. Build-Datei der obersten Ebene: Hier finden Sie die Konfigurationsoptionen, die allen Modulen Ihres Projekts gemeinsam sind.

  4. Build-Datei auf Modulebene : Jedes Modul verfügt über eine eigene Gradle-Build-Datei, die modulspezifische Build-Einstellungen enthält. Sie verbringen die meiste Zeit damit, Build-Dateien auf Modulebene und nicht die Build-Datei Ihres Projekts auf oberster Ebene zu bearbeiten.

Um sich diese build.gradleDateien anzusehen , öffnen Sie das Projektfenster von Android Studio (indem Sie die Registerkarte Projekt auswählen) und erweitern Sie den Ordner Gradle Scripts. Die ersten beiden Elemente im Ordner "Gradle Scripts" sind die Gradle-Builddateien auf Projektebene und auf Modulebene

Gradle-Build-Datei der obersten Ebene

Jedes Android Studio-Projekt enthält eine einzelne Gradle-Build-Datei der obersten Ebene. Diese build.gradleDatei ist das erste Element, das im Ordner "Gradle Scripts" angezeigt wird und deutlich als "Projekt" gekennzeichnet ist.

Meistens müssen Sie keine Änderungen an dieser Datei vornehmen, aber es ist immer noch nützlich, den Inhalt und die Rolle zu verstehen, die sie in Ihrem Projekt spielt.

Gradle-Build-Dateien auf Modulebene

Zusätzlich zur Gradle-Build-Datei auf Projektebene verfügt jedes Modul über eine eigene Gradle-Build-Datei. Unten finden Sie eine kommentierte Version einer einfachen Gradle-Build-Datei auf Modulebene.

Andere Gradle-Dateien

Zusätzlich zu den build.gradle-Dateien enthält Ihr Gradle Scripts-Ordner einige andere Gradle-Dateien. Meistens müssen Sie diese Dateien nicht manuell bearbeiten, da sie automatisch aktualisiert werden, wenn Sie relevante Änderungen an Ihrem Projekt vornehmen. Es ist jedoch eine gute Idee, die Rolle dieser Dateien in Ihrem Projekt zu verstehen.

gradle-wrapper.properties (Gradle-Version)

Mit dieser Datei können andere Personen Ihren Code erstellen, auch wenn Gradle nicht auf ihrem Computer installiert ist. Diese Datei prüft, ob die richtige Version von Gradle installiert ist, und lädt bei Bedarf die erforderliche Version herunter.

settings.gradle

Diese Datei verweist auf alle Module, aus denen Ihr Projekt besteht.

gradle.properties (Projekteigenschaften)

Diese Datei enthält Konfigurationsinformationen für Ihr gesamtes Projekt. Es ist standardmäßig leer, aber Sie können Ihrem Projekt eine Vielzahl von Eigenschaften zuweisen, indem Sie sie dieser Datei hinzufügen.

local.properties (SDK-Speicherort)

Diese Datei teilt dem Android Gradle-Plugin mit, wo sich Ihre Android SDK-Installation befindet.

Hinweis: local.properties Enthält Informationen, die für die lokale Installation des Android SDK spezifisch sind. Dies bedeutet, dass Sie diese Datei nicht unter Quellcodeverwaltung halten sollten.

Empfohlene Lektüre - Tutsplus Tutorial

Ich habe ein klares Verständnis von Gradle daraus.


1
Beachten Sie, dass von Antworten nur mit Links abgeraten wird. SO-Antworten sollten der Endpunkt einer Suche nach einer Lösung sein (im Gegensatz zu einem weiteren Zwischenstopp von Referenzen, die im Laufe der Zeit veralten). Bitte fügen Sie hier eine eigenständige Zusammenfassung hinzu, wobei Sie den Link als Referenz behalten.
Kleopatra

30

Gradle ist eine Art Build-Tool , das den Quellcode des Programms erstellt. Es ist daher ein wichtiger Bestandteil von Android Studio und muss installiert werden, bevor Sie mit der Entwicklung Ihrer Anwendung beginnen können.

Wir müssen es nicht separat installieren, da das Android Studio dies für uns erledigt, wenn wir unser erstes Projekt erstellen.


4
Was meinen Sie mit dem Erstellen des Quellcodes des Programms? Ist das nicht die Aufgabe eines Entwicklers?
committedandroider

Diese Antwort ist in der Formulierung völlig falsch. Gradle ist das Paket-Tool, das im Lieferumfang von Android Studio enthalten ist. Es kümmert sich also darum, die apk zu erstellen. Der Quellcode wird immer vom Compiler erstellt und sonst nichts.
AutomEng

Aus einer anderen Frage geht hervor, dass Gradle ohne eine zuverlässige Internetverbindung nicht richtig funktioniert. Bedeutet dies, dass ich Android Studio wegwerfen muss, bis das behoben ist?
Michael

2
@committedandroider: Die Aufgabe eines Entwicklers besteht darin , den Quellcode zu schreiben , nicht ihn zu erstellen . In der Systementwicklung verwenden wir das Wort "Build", um den Prozess des Packens des kompilierten Quellcodes in ein Endprodukt (ein Paket oder eine ausführbare Datei ) zu bezeichnen
MestreLion

1
@MestreLion lol Ich war ziemlich verwirrt damals , weil die Menschen verwendet , ‚Gebäude‘ in Bezug Quellcode für ihre Projekten- zu schreiben ich diesen Chat - Server gebaut, diese App zu ...
committedandroider

26

DEFINITION :: Gradle können einen strukturiertes Gebäude Mechanismus beschrieben, in dem es um einen Entwickler bietet die Werkzeuge und die Flexibilität , die Ressourcen eines Projekt zu verwalten bauen zu schaffen , die sind smaller in size, targeting specific requirementsfür bestimmte Geräte bestimmter Konfigurationen


GRUNDKONFIGURATIONEN

  1. minimumSdk
  2. maximumSdk
  3. targettedSdk
  4. versionCode
  5. versionName

BIBLIOTHEKEN :: Wir können zusätzlich zu den Anforderungen einfach Android-Bibliotheken oder andere Bibliotheken von Drittanbietern hinzufügen, was früher eine mühsame Aufgabe war. Wenn die Bibliothek nicht für das vorhandene Projekt geeignet ist, wird dem Entwickler ein Protokoll angezeigt, in dem die Person eine geeignete Lösung finden kann, um Änderungen am Projekt vorzunehmen, damit die Bibliothek hinzugefügt werden kann. Es ist nur eine Abhängigkeitslinie


VERSCHIEDENHEITEN VON GEBÄUDEN ERZEUGEN

Kombinieren von Build-Typen mit Build-Varianten, um verschiedene Build-Varianten zu erhalten

 ====================                         ====================
|     BuildTypes     |                       |   ProductFlavours  |
 --------------------  ====================== --------------------
|  Debug,Production  |      ||       ||      | Paid,Free,Demo,Mock|
 ====================       ||       ||       ==================== 
                            ||       ||
                            VV       VV
 =================================================================
|           DebugPaid, DebugFree, DebugDemo, DebugMock            |
|  ProductionPaid, ProductionFree, ProductionDemo, ProductionMock |
 =================================================================

GRÖSSE REDUZIEREN

Gradle hilft bei der Reduzierung der Größe des generierten Builds, indem nicht verwendete Ressourcen sowie nicht verwendete Elemente aus integrierten Bibliotheken entfernt werden


ERLAUBNISSE VERWALTEN

Wir können bestimmte Berechtigungen für bestimmte Builds angeben, indem wir bestimmte Berechtigungen in bestimmten Szenarien basierend auf den Anforderungen hinzufügen


GEBÄUDE FÜR BESTIMMTE GERÄTE

Wir können das Generieren von Builds für bestimmte Geräte verwalten, die bestimmte Dichten und bestimmte API-Ebenen enthalten. Dies hilft bei Produktbereitstellungen im App Store gemäß den Anforderungen für mehrere Gerätetypen


GUTE REFERENZ

Vogella Tutorials


25

Alles, was Sie über Gradle wissen müssen, finden Sie hier: Gradle Plugin User Guide

Ziele des neuen Build-Systems

Die Ziele des neuen Build-Systems sind:

  • Erleichtern Sie die Wiederverwendung von Code und Ressourcen
  • Machen Sie es einfach, mehrere Varianten einer Anwendung zu erstellen, entweder für die Multi-Apk-Verteilung oder für verschiedene Varianten einer Anwendung
  • Erleichtern Sie das Konfigurieren, Erweitern und Anpassen des Erstellungsprozesses
  • Gute IDE-Integration

Warum Gradle?

Gradle ist ein erweitertes Build-System sowie ein erweitertes Build-Toolkit, mit dem benutzerdefinierte Build-Logik über Plugins erstellt werden kann.

Hier sind einige seiner Funktionen, die uns dazu bewogen haben, Gradle zu wählen:

  • Domain Specific Language (DSL) zur Beschreibung und Bearbeitung der Build-Logik
  • Build-Dateien basieren auf Groovy und ermöglichen das Mischen deklarativer Elemente über DSL und die Verwendung von Code zum Bearbeiten der DSL-Elemente, um benutzerdefinierte Logik bereitzustellen.
  • Integriertes Abhängigkeitsmanagement über Maven und / oder Ivy.
  • Sehr flexibel. Ermöglicht die Verwendung von Best Practices, erzwingt jedoch keine eigene Vorgehensweise.
  • Plugins können ihr eigenes DSL und ihre eigene API für die Verwendung von Build-Dateien verfügbar machen.
  • Gute Tooling-API für IDE-Integration

25

Ich beziehe mich auf zwei Tutorials, um die Antwort eins , zwei zu schreiben

Gradle ist ein deklaratives Build-Tool für allgemeine Zwecke. Dies ist ein allgemeiner Zweck, da damit so ziemlich alles erstellt werden kann, was Sie im Build-Skript implementieren möchten. Es ist deklarativ, da Sie nicht viel Code in der Build-Datei sehen möchten, der nicht lesbar und weniger wartbar ist. Während Gradle die Idee von Konventionen und einen einfachen und deklarativen Build bietet, macht es das Tool auch anpassungsfähig und Entwickler können es erweitern. Es bietet auch eine einfache Möglichkeit, das Standardverhalten und verschiedene Hooks anzupassen, um Funktionen von Drittanbietern hinzuzufügen.

Gradle kombiniert die guten Teile beider Tools und bietet zusätzliche Funktionen und verwendet Groovy als domänenspezifische Sprache (DSL). Es verfügt über die Leistung und Flexibilität des Ant-Tools mit Maven-Funktionen wie dem Build-Lebenszyklus und der Benutzerfreundlichkeit.

Warum Gradle? Warum jetzt?

Die Antwort des Build-Tools besteht darin, Skriptfunktionen über nicht standardmäßige Erweiterungsmechanismen hinzuzufügen. Am Ende mischen Sie Skriptcode mit XML oder rufen externe Skripte aus Ihrer Build-Logik auf. Es ist leicht vorstellbar, dass Sie im Laufe der Zeit immer mehr benutzerdefinierten Code hinzufügen müssen. Infolgedessen führen Sie unweigerlich zu einer versehentlichen Komplexität, und die Wartbarkeit geht aus dem Fenster.

Angenommen, Sie möchten eine Datei an einen bestimmten Speicherort kopieren, wenn Sie die Release-Version Ihres Projekts erstellen. Um die Version zu identifizieren, überprüfen Sie eine Zeichenfolge in den Metadaten, die Ihr Projekt beschreiben. Wenn es einem bestimmten Nummerierungsschema entspricht (z. B. 1.0-RELEASE), kopieren Sie die Datei von Punkt A nach Punkt B. Von außen betrachtet klingt dies möglicherweise nach einer trivialen Aufgabe. Wenn Sie sich auf XML verlassen müssen, die Build-Sprache vieler traditioneller Tools, wird es ziemlich schwierig, diese einfache Logik auszudrücken.

Entwicklung der Java Build Tools

Die Java-Build-Logik muss in XML beschrieben werden. XML eignet sich hervorragend zur Beschreibung hierarchischer Daten, kann jedoch den Programmfluss und die bedingte Logik nicht ausdrücken. Mit zunehmender Komplexität eines Build-Skripts wird die Pflege des Build-Codes zum Albtraum.

In Ant machen Sie das JAR-Ziel vom Kompilierungsziel abhängig. Ant gibt keine Anleitung zur Strukturierung Ihres Projekts. Obwohl es maximale Flexibilität ermöglicht, macht Ant jedes Build-Skript einzigartig und schwer verständlich. Für Ihr Projekt erforderliche externe Bibliotheken werden normalerweise in die Versionskontrolle eingecheckt, da es keinen automatisierten Mechanismus gibt, um sie von einem zentralen Ort abzurufen.

Maven 1 , veröffentlicht im Juli 2004, versuchte diesen Prozess zu vereinfachen. Es bot eine standardisierte Projekt- und Verzeichnisstruktur sowie ein Abhängigkeitsmanagement. Leider ist benutzerdefinierte Logik schwer zu implementieren

Gradle passt genau in diese Generation von Build-Tools und erfüllt viele Anforderungen moderner Build-Tools (Abbildung 1). Es bietet ein ausdrucksstarkes DSL, eine Konvention über den Konfigurationsansatz und ein leistungsstarkes Abhängigkeitsmanagement. Es ist der richtige Schritt, XML aufzugeben und die dynamische Sprache Groovy einzuführen, um Ihre Build-Logik zu definieren. Klingt zwingend, nicht wahr?

Gradle kombiniert die besten Funktionen anderer Build-Tools.

Geben Sie hier die Bildbeschreibung ein

Gradles überzeugender Funktionsumfang

Geben Sie hier die Bildbeschreibung ein

Warum sollten Sie Ihre Java-Projekte mit Gradle anstatt mit Ant oder Maven erstellen?

Das Standard-Build-Tool für Android (und der neue Star der Build-Tools in der JVM) wurde entwickelt, um das Scripting komplexer mehrsprachiger Builds zu vereinfachen. Sollten Sie jedoch darauf umsteigen, wenn Sie Ant oder Maven verwenden?

Der Schlüssel zum Entsperren der Power-Funktionen von Gradle in Ihrem Build-Skript liegt in der Ermittlung und Anwendung des Domänenmodells (siehe Abbildung unten). Geben Sie hier die Bildbeschreibung ein

Gradle kann nicht alle Anforderungen kennen, die für Ihren Unternehmensaufbau spezifisch sind. Durch das Offenlegen von Hooks in Lebenszyklusphasen ermöglicht Gradle die Überwachung und Konfiguration des Ausführungsverhaltens des Build-Skripts.

Gradle erstellt ein Vokabular für sein Modell, indem er ein in Groovy implementiertes DSL verfügbar macht. Wenn Sie sich mit einer komplexen Problemdomäne befassen, kann in diesem Fall die Aufgabe, Software zu erstellen und eine gemeinsame Sprache zum Ausdrücken Ihrer Logik zu verwenden, ein leistungsstarkes Werkzeug sein.

Ein weiteres Beispiel ist die Art und Weise, wie Sie Abhängigkeiten zu externen Bibliotheken ausdrücken können, ein sehr häufiges Problem, das durch Build-Tools gelöst wird. Out-of-the-Box Gradle bietet Ihnen zwei Konfigurationsblöcke für Ihr Build-Skript, mit denen Sie die Abhängigkeiten und Repositorys definieren können, aus denen Sie sie abrufen möchten. Wenn die Standard-DSL-Elemente nicht Ihren Anforderungen entsprechen, können Sie über den Erweiterungsmechanismus von Gradle sogar Ihr eigenes Vokabular einführen.

Integration mit anderen Build-Tools

Gradle spielt gut mit Ant, Maven und Ivy seiner Vorgänger, wie im Bild unten gezeigt.

Geben Sie hier die Bildbeschreibung ein

Automatisieren Sie Ihr Projekt von der Erstellung bis zur Bereitstellung

Geben Sie hier die Bildbeschreibung ein

Im Bild: Phasen einer Bereitstellungspipeline.

  • Code kompilieren

  • Ausführen von Unit- und Integrationstests

  • Durchführen einer statischen Code-Analyse und Generieren einer Testabdeckung

  • Verteilung erstellen

  • Bereitstellung der Zielumgebung

  • Bereitstellen des Liefergegenstandes

  • Durchführung von Rauch- und automatisierten Funktionstests

Ich beziehe mich auf zwei Tutorials, um die Antwort eins , zwei zu schreiben


1
Darüber hinaus können Sie Ihre Android-Apps über die Befehlszeile auf Ihrem Computer oder auf Computern erstellen, auf denen Android Studio nicht installiert ist (z. B. Continuous Integration Server).
JettimadhuChowdary

23

Gradle ist ein Build-System . Build-Systeme sind Softwaretools zur Automatisierung des Programmkompilierungsprozesses. Build-Systeme gibt es in verschiedenen Formen und werden für eine Vielzahl von Software-Build-Aufgaben verwendet. Ihr primäres Ziel ist es, ausführbare Dateien effizient zu erstellen.

Ein weiterer verwandter Begriff ist Build-Automatisierung. Hierbei handelt es sich um den Prozess der Automatisierung der Erstellung eines Software-Builds und der damit verbundenen Prozesse, einschließlich: Kompilieren von Computerquellcode in Binärcode, Packen von Binärcode und Ausführen automatisierter Tests.

Es gibt nur wenige ähnliche Build-Systeme für andere Sprachen (siehe vollständige Liste hier ):

  1. Apache Ant & Apache Maven - Java
  2. sbt (Simple Build Tool) - für Scala (Play Framework usw.)
  3. AAP - Python-basiertes Build-Tool
  4. Rechen (Apache Builder) - Ruby
  5. Leiningen für Clojure

17

Ich denke, dahinter steckt die Frage, warum das Android Studio / Gradle-Erlebnis so schlecht ist.

Typische Clojure-Erfahrung:

  • Projekt mit den in project.clj aufgelisteten Abhängigkeiten herunterladen.
  • Leiningen bekommt die Abhängigkeiten dank Clojars und Maven.
  • Projekt kompiliert.

Typisches Android Studio / Gradle-Erlebnis:

  • "Importiere mein Eclipse-Projekt".
  • OK Projekt importiert.
  • Gradle macht es thang ... warte ... warte ... warte ... Gradle ist fertig.
  • Kompilieren ... kann nicht kompilieren, weil ich nicht weiß, was eine X-Bibliothek ist / nicht finden kann.

Ich bin mir nicht sicher, ob dies genau Gradles Schuld ist. Aber der "Import aus Eclipse-Projekt" scheint ziemlich schuppig. Bei aller angeblichen Raffinesse von Gradle und den Vorzügen eines Build-Systems scheint Android Studio die Build-Abhängigkeiten oder den Build-Prozess nicht sehr gut aus Eclipse zu importieren.

Sie erfahren nicht, wann ein vollständiger Abhängigkeitsgraph nicht importiert werden konnte. Das Android Studio bietet keine nützliche Hilfe oder Tipps zur Lösung des Problems. Es sagt Ihnen nicht, wo Sie manuell in den Eclipse-Ordnern suchen können. Es sagt Ihnen nicht, welche Bibliothek zu fehlen scheint. Oder helfen Sie bei der Suche nach Maven usw. nach ihnen.

2016 funktionieren Dinge wie Leiningen / Clojars oder Node's Npm oder Python's Pip oder das Debian-Apkg (und ich bin sicher, dass viele ähnliche Paketmanager für andere Sprachen und Systeme) alle wunderbar ... fehlende Abhängigkeiten gehören der Vergangenheit an.

Außer mit Android. Android Studio ist jetzt der einzige Ort, an dem ich immer noch die Hölle der fehlenden Abhängigkeit zu erleben scheine.

Ich bin geneigt zu sagen, dass dies Googles Schuld ist. Sie brachen das Android-Ökosystem (und Tausende bestehender Android-Projekte / Online-Tutorials), als sie sich unbekümmert entschieden, von Eclipse zu Android Studio / Gradle zu wechseln, ohne einen robusten Konvertierungsprozess zu erstellen. Leute, deren Projekte in Eclipse funktionieren, passen sie nicht an AS an (vermutlich, weil es ihnen weh tut). Und Leute, die versuchen, diese Projekte in AS zu verwenden, haben die gleichen Probleme.

Und überhaupt, wenn Gradle dieses superstarke Build-System ist, warum verwalte ich dann noch viele andere Abhängigkeiten im SDK-Manager? Warum kann ein Projekt, das beispielsweise das ndk benötigt, dies nicht in seiner Gradle-Datei angeben, damit es bei Bedarf automatisch installiert und erstellt wird? Warum ist NDK etwas Besonderes? Ähnliches gilt für Zielplattformen? Warum installiere ich sie explizit in der IDE, anstatt nur mein Projekt mit ihnen zu vergleichen und dies alles hinter den Kulissen für mich sortieren zu lassen?


4
Ich stimme voll und ganz zu, dass Gradle ein schreckliches Build-System ist. Es ist die Komponente, die Android Studio weitaus schlechter macht als X-Code oder Visual Studio. Mir ist klar, dass diese das System hinter den Kulissen "aufbauen" müssen, aber ich muss ihre Interna nicht wirklich kennen / pflegen / basteln. Gradle hingegen scheint mit jedem Android Studio-Update zu brechen und blockiert das System, selbst wenn nur eine Klasse hinzugefügt wird. Keine andere IDE macht das.
Schmied

14

Gradle ist ein erweitertes Build-System sowie ein erweitertes Build-Toolkit, mit dem benutzerdefinierte Build-Logik über Plugins erstellt werden kann!

Vorteile:

  • Dsl - Domain-spezifische Sprache, basierend auf Groovy
  • DAG - Directed Acyclic Graph
  • Inkrementelle Builds
  • Erweiterbares Domain-Modell
  • Gradle ist immer auf dem neuesten Stand
  • Bevor eine Aufgabe ausgeführt wird, erstellt Gradle eine Momentaufnahme der Ein- und Ausgabe ihrer Aufgabe.
  • Falls sich der Schnappschuss geändert hat oder nicht existiert, führt Gralde diese Aufgabe erneut aus.

Manifest Einträge

Über DSL können folgende Manifesteinträge konfiguriert werden:

Build-Variante

Standardmäßig richtet das Android-Plugin das Projekt automatisch so ein, dass sowohl eine Debug- als auch eine Release-Version der Anwendung erstellt werden.

Abhängigkeiten

  1. Lokale Abhängigkeiten:

Wenn sich in Ihrem lokalen Dateisystem Binärarchive befinden, von denen ein Modul abhängt, z. B. JAR-Dateien, können Sie diese Abhängigkeiten in der Build-Datei für dieses Modul deklarieren.

  1. Remote-Abhängigkeiten:

Zuerst muss das Repository zur Liste hinzugefügt werden, und dann muss die Abhängigkeit so deklariert werden, dass Maven oder Ivy ihre Artefakte deklarieren.


13

Gradle ist für die Groovy JVM-Sprache das, was Ameise für Java ist. Im Grunde ist es Groovys Build-Tool. Im Gegensatz zu Ant basiert es auf der vollständigen Groovy-Sprache. Sie können beispielsweise Groovy-Skriptcode in das Gradle-Skript schreiben, um etwas zu tun, anstatt sich auf eine bestimmte Domänensprache zu verlassen.

Ich kenne die spezifische Integration von IntelliJ nicht, aber stellen Sie sich vor, Sie könnten Groovy so "erweitern", dass Sie bestimmte "Build" -Sprachprimitive schreiben könnten, und sie wurden einfach Teil der Groovy-Sprache. (Groovys Metaprogrammierung ist eine ganze Diskussion für sich.) IntelliJ / Google könnte Gradle verwenden, um eine sehr hohe Build-Sprache zu erstellen, aber es ist eine Sprache, die auf einem erweiterbaren, offenen Standard basiert.


2
Es ist nicht "Groovys Build Tool" - es ist ein Mehrzweck-Build-Tool, dessen DSL auf Groovy aufgebaut ist
Martyglaubitz

10

Gradle ist ein erweitertes Build-Toolkit für Android, das Abhängigkeiten verwaltet und es Ihnen ermöglicht, benutzerdefinierte Build-Logik zu definieren. Funktionen sind wie

  • Passen Sie den Erstellungsprozess an, konfigurieren Sie ihn und erweitern Sie ihn.

  • Erstellen Sie mit demselben Projekt mehrere APKs für Ihre App mit unterschiedlichen Funktionen.

  • Code und Ressourcen wiederverwenden.

verweisen


9

Gradle ist ein automatisiertes Build-Toolkit, das sich nicht nur für Android-Projekte in viele verschiedene Umgebungen integrieren lässt.

Hier sind einige Dinge, die Sie mit gradle tun können.

  • Minimale Konfiguration für neue Projekte erforderlich, da Gradle Standardkonfigurationen für Ihre Android Studio-Projekte hat.

  • Abhängigkeitserklärung. Sie können Abhängigkeits-JAR-Dateien oder Bibliotheksdateien deklarieren, die auf einem lokalen oder Remote-Server gehostet werden.

  • Gradle generiert automatisch ein Testverzeichnis und eine Test-APK aus der Quelle Ihres Projekts.

  • Wenn Sie Ihrer Gradle-Builddatei alle erforderlichen Informationen wie keyPasswordund hinzufügen keyAlias, können Sie mit Gradle signierte APKs generieren.

  • Gradle kann mehrere APKs mit unterschiedlichen Paket- und Build-Konfigurationen aus einem einzigen Modul generieren.


8

In Android Studio ist Gradle ein benutzerdefiniertes Build-Tool, mit dem Android-Pakete (APK-Dateien) erstellt werden, indem Abhängigkeiten verwaltet und benutzerdefinierte Build-Logik bereitgestellt werden.

APK-Datei (Android Application Package) ist eine speziell formatierte Zip-Datei, die enthält

  • Bytecode
  • Ressourcen (Bilder, Benutzeroberfläche, XML usw.)
  • Manifestdatei

Eine APK-Datei wird signiert und mit ADB (Android Debug Bridge) auf das Gerät übertragen, wo sie ausgeführt wird.


6

Gradle ist ein benutzerdefiniertes Build-Tool, das zum Erstellen von APK oder als Application Package Kit bezeichnet wird.


4

von @Brian Gardner:

Gradle ist ein umfangreiches Build-Tool und Abhängigkeitsmanager für Programmierprojekte. Es hat eine domänenspezifische Sprache, die auf Groovy basiert. Gradle bietet auch Unterstützung durch Build-by-Convention für viele Arten von Projekten, einschließlich Java, Android und Scala.

Merkmal von Gradle:

  1. Abhängigkeitsmanagement
  2. Verwenden von Ant von Gradle
  3. Gradle Plugins
  4. Java Plugin
  5. Android Plugin
  6. Multi-Projekt-Builds

3

Gradle ermöglicht die Automatisierung der Erstellung komplexer Android-Projekte, die Zehntausende von Codezeilen aus mehreren Quellen, Projekten, Bibliotheken usw. umfassen. Es kann bedingt mehrere optimierte APKs basierend auf einer Vielzahl von Konfigurationsspezifikationen generieren - wenn Sie dies sind interessiert, bieten die anderen Antworten weitere Details zu diesem Aspekt von Gradle.

Wenn Sie jedoch auf Android zu entwickeln, Gradle in 99% der Fälle neu sind ist , was hält Ihr Projekt von Gebäuden. Es ist ein unergründliches, komplexes System, das den Android-Erstellungsprozess effektiv verschleiert und es unerfahrenen Entwicklern im Wesentlichen nicht zur Verfügung stellt, dh um eine einfache Android-Einstiegs-App zu erstellen, muss der ahnungslose Neuling möglicherweise viele Dinge studieren und verstehen, mit denen er nicht verhandelt hat sowie:

  • Android APK Struktur und Ökosystem
  • Android Studio
  • Java-Klassenpfade und Abhängigkeiten
  • Groovy
  • Gradle-Build-Skripte
  • Viele andere komplexe und interessante Technologien

All diese Dinge sind für Android-Entwickler interessant und nützlich, aber sie sind alles andere als einfach und stellen eine gewaltige Eintrittsbarriere dar. Ich vermute, was das OP dazu inspiriert hat, diese Frage zu stellen, ist das Gefühl der Frustration, das den Neophytenentwickler unweigerlich trifft, nachdem er viel zu lange versucht hat, eine einfache App zu erstellen und von Gradle kontinuierlich vereitelt zu werden. Das Problem wird durch die überwältigende Menge an hochtechnischer Dokumentation, die für all diese Technologien verfügbar ist, pervers verschärft. Auch für einen großen Entwicklungsbedarf ist Gradle übertrieben.

Eine Alternative besteht darin, ein Shell-Skript zu schreiben, das Ihr Projekt erstellt, indem die im Android SDK verfügbaren Tools automatisiert werden. Die Vorteile dieses Ansatzes sind vielfältig. Für den Anfang ist es wahrscheinlich der beste Weg, den Erstellungsprozess und das Android-Ökosystem zu studieren und zu verstehen, und Sie können vollständig steuern, wie Ihre App erstellt wird. Dieser Ansatz eignet sich jedoch besser für zutiefst uneinlösbare Tech-Köpfe als für unerfahrene Noobs, die Android ausprobieren.

Was durch seine Abwesenheit auffällt (bitte informieren Sie mich, wenn es so etwas gibt), ist eine leichtgewichtige Einstiegs-IDE mit einem reduzierten Funktionsumfang, die gleichzeitig den Erstellungsprozess vereinfacht, ohne ihn zu verdecken (also keine Netbeans oder Eclipse), die sie möglicherweise noch haben könnte benutze Gradle (was mit Ant falsch war). Es sollte einfach sein, APKs zu generieren, die einigen gängigen Konfigurationen entsprechen, und eine Projektstruktur zu verwenden, die sich zu einem vollständigen Android Studio-Projekt entwickeln kann, falls Sie sich dafür entscheiden.


1

Gradle ist ein von Android Studio bereitgestelltes Tool, um zwei wichtige Prozesse zu implementieren:

  1. Bauen Sie unsere Projekte auf
  2. Packen Sie AndroidManifest.xml, res-Ordner und Binärcode in eine speziell formatierte Zip-Datei namens APK

1

Suchergebnisse Ausgewähltes Snippet aus dem Web Android | bauen. gradle. Gradle ist ein Build-System (Open Source), mit dem das Erstellen, Testen, Bereitstellen usw. automatisiert wird. Beispielsweise kann die einfache Aufgabe, einige Dateien von einem Verzeichnis in ein anderes zu kopieren, vor dem eigentlichen Build vom Gradle-Build-Skript ausgeführt werden Prozess passiert.


1

In Android Studio wird Gradle zum Erstellen unserer Android-Anwendungsprojekte verwendet und spielt somit die Rolle eines Build-Systems. Vor Android Studio haben wir in Eclipse die Anwendungen mit dem Befehlszeilentool kompiliert und erstellt, das bald von GUI-basierten Schritten zum Erstellen und Ausführen von Android-Anwendungen in Eclipse mit ANT übernommen wurde. Jedes Tool zur Entwicklung von Android-Anwendungen muss Ressourcen, Java-Quellcode und externe Bibliotheken kompilieren und zu einer endgültigen APK kombinieren.

Gradle ist ein Build-System, das für das Kompilieren, Testen, Bereitstellen und Konvertieren des Codes in .dex-Dateien und damit das Ausführen der App auf dem Gerät verantwortlich ist.

Da in Android Studio das Gradle-System vorinstalliert ist, müssen keine zusätzlichen Laufzeitsoftware installiert werden, um unser Projekt zu erstellen. Immer wenn Sie Laufin Android Studio auf die Schaltfläche klicken , wird automatisch eine Gradle-Aufgabe ausgelöst und das Erstellen des Projekts gestartet. Nachdem gradle seine Aufgabe abgeschlossen hat, wird die App in AVD oder auf dem angeschlossenen Gerät ausgeführt.

Ein Build-System wie Gradle ist kein Compiler, Linker usw., sondern steuert und überwacht den Vorgang des Kompilierens, Verknüpfen von Dateien, Ausführen von Testfällen und schließlich das Bündeln des Codes in einer APK-Datei für Ihre Android-Anwendung.

Für jedes Android Studio-Projekt gibt es zwei build.gradle- Dateien, eine für Anwendungen und eine für Build-Dateien auf Projektebene (Modulebene) .

Während des Erstellungsprozesses nimmt der Compiler den Quellcode, die Ressourcen, die JAR-Dateien der externen Bibliotheken und die AndroidManifest.xml (die die Metadaten zur Anwendung enthält) und konvertiert sie in .dex-Dateien (Dalvik Executable-Dateien) , die Bytecode enthalten . Dieser Bytecode wird von allen Android-Geräten unterstützt, um Ihre App auszuführen. Dann kombiniert APK Manager die .dex- Dateien und alle anderen Ressourcen zu einer einzigen apk-Datei. APK Packager signiert Debug oder Release Apk mit dem entsprechenden Debug- oder Release-Keystore.

Debug apk wird im Allgemeinen zu Testzwecken verwendet, oder wir können sagen, dass es nur in der Entwicklungsphase verwendet wird. Wenn Ihre App mit den gewünschten Funktionen ausgestattet ist und Sie bereit sind, Ihre Anwendung für den externen Gebrauch zu veröffentlichen, benötigen Sie eine Release-Apk, die mit einem Release-Keystore signiert ist.

Lassen Sie uns nun etwas Licht auf die Gradle-Dateien werfen.

settings.gradle In der Datei settings.gradle (Gradle-Einstellung) werden alle in Ihrer App verwendeten Module angegeben.

build.gradle (Projektebene) Die build.gradle-Datei der obersten Ebene (Modul) ist eine Builddatei auf Projektebene, die Buildkonfigurationen auf Projektebene definiert. Diese Datei wendet Konfigurationen auf alle Module im Android-Anwendungsprojekt an.

build.gradle (Anwendungsebene) Die Datei build.gradle auf Anwendungsebene befindet sich in jedem Modul des Android-Projekts. Diese Datei enthält Ihren Paketnamen als Anwendungs-ID, Versionsname (apk-Version), Versionscode, Minimum und Ziel-SDK für ein bestimmtes Anwendungsmodul. Wenn Sie externe Bibliotheken (nicht die JAR-Dateien) einschließen, müssen Sie diese in der Gradle-Datei auf App-Ebene erwähnen, um sie als Abhängigkeiten der Anwendung in Ihr Projekt aufzunehmen.

Hinweis: Wenn eine bestimmte Anwendung in Variationen für einzelne Module wie Smartphone, Tablet oder TV entwickelt wird, müssen separate Gradle-Dateien für alle erstellt werden. Sie können Ihr Gradle-System sogar über das Befehlszeilen- Tool starten . Folgende Befehle werden dafür verwendet:

./gradlew build - (Projekt
erstellen ) ./gradlew clean build - (Build-Projekt komplett neu
erstellen ) ./gradlew clean build - (Test ausführen )
./gradlew wrapper - (um alle verfügbaren Aufgaben anzuzeigen)


0

Gradle = Groovy + Cradle Hans Dockter Forum Kommentar

Die Verwirrung ist etwas unnötig, wenn sie in Android Studio nur "Build" oder so genannt werden könnte.

Wir möchten es uns in der Entwicklungsgemeinschaft schwer machen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.