2014-03-31 4 views
23

Ich bin neu zu Gradle (und so auch zu groovy) und ich bin kaum hinter irgendeinem Konzept und weiß nicht wirklich, ob es groovy oder grodle verwandt ist und welche Schlüsselwörter googeln, um Hilfe zu bekommen.Verwirrt mit der Verwendung von Zuweisung "=" und Klammern {}

stolpere ich sehr oft über Sachen wie:

android { 
    [some configuration] 
} 

Also, was android ist? Eine Klasse? Ein Namensraum? Eine Sammlung von Eigenschaften?

Aber was noch verwirrender ist:

Manchmal Konfigurationen ich sehe, die wie folgt aussehen:

minSdkVersion 19 

Dies scheint eine Zuordnung zu sein, aber ohne ein Gleichheitszeichen. Und manchmal gibt es Aufgaben mit dem gleichen Zeichen wie

source = "folder/file.java" 

Also das ist sehr verwirrend. Gleichheitszeichen gegen kein Gleichheitszeichen. All diese Bracket-Sachen.

Alle groovigen Einführungen, die ich gesehen habe, decken genau diese Themen nicht ab. Also ist es einige Gradle Konvention oder ist es wirklich groovy Syntax?

+3

Ihre Frage drückt genau die Verwirrung aus, die ich habe +1 – codebox

Antwort

16

In Groovy sind Klammern manchmal optional.

Die erste android übergibt eine Schließung an eine Methode. dh:

void android(Closure config) { 
    println "In Android : ${config()}" 
} 

android { 
    'tim' 
} 

druckt: In Android : tim es ist der gleiche wie der Aufruf:

android({ 
    'tim' 
}) 

Wenn Sie die Pars zurück setzen.

Das zweite Beispiel mit minSdkVersion ist das gleiche, aber es übergibt eine Integer an eine Methode.

void minSdkVersion(Integer version) { 
    println "In MinSdkVersion : $version" 
} 

minSdkVersion 19 
// same as minSdkVersion(19) 

Damit druckt In MinSdkVersion : 19

Das letzte Beispiel eine Eigenschaft auf einen String setzt (wie man erwarten würde)

+10

Viele Gradle-Typen haben für jede Eigenschaft eine Methode generiert, so dass man 'minSdkVersion 19' anstelle von 'minSdkVersion = 19' schreiben kann. 'foo {prop1 = ...; prop2 = ...; ...} 'ist die Syntax zum Konfigurieren eines Objekts namens' foo'. Es ist in der Regel ähnlich, aber prägnanter als 'foo.prop1 = ...; foo.prop2 = ...; ... '.Wenn man den Typ von 'foo' kennt, kann man seine Methoden und Eigenschaften in der [Gradle Build Language Reference] (http://gradle.org/docs/current/dsl/index.html) nachlesen, oder im Falle von ein externes Plugin wie das Android-Plugin, in der Dokumentation des Plugins. –

+0

Danke, das hat sehr geholfen, hinter dieses Konzept zu kommen. – Subby

4

Streng genommen android ist ein dynamisches Verfahren, das eine Schließung akzeptiert (ein Code Block), der Zugang zu einer internen Repräsentation von android Plugin/Task-Konfiguration erhält. Innerhalb dieser Schließung rufen Sie entweder andere Methoden auf oder führen Zuordnungen zu den verfügbaren Eigenschaften durch. Wenn es kein Gleichheitszeichen gibt, dann ist es ein Methodenaufruf, wenn es dann eine reine Eigenschaft gibt. Sie können sich die Idee durch die Dokumentation des Plugins oder die Objekte, die es darstellen, erklären.

Ich denke, Sie können sicher auf diesen Block als Android-Plugin-Konfiguration verweisen. Da wirkt sich der Code aus.

Verwandte Themen