2014-04-12 5 views
9

Ich versuche, ein buildConfigField in meinem productFlavor-Block zu setzen und dann auf dieses Feld an anderer Stelle in meiner Gradle-Builddatei zu verweisen, damit ich diesen Wert beim Erstellen des Namens für meine verwenden kann apk.Zugriff auf ein buildConfigField an anderer Stelle in einer Builddatei von

beispiels

productFlavors{ 
    flavor1{    
     buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor1"' 

    } 
    flavor2{    
     buildConfigField "String", "APP_FLAVOR_NAME", '"MyApp-Flavor2"' 

    } 

Wie kann ich APP_FLAVOR_NAME an anderer Stelle in meinem build.gradle Skript?

Ich kämpfe auch, um herauszufinden, wie man nur den Flavor-Namen selbst im Buildscript als eine weitere Option referenziert, um den apk-Namen zu konstruieren. Wie kann ich das auch tun?

Antwort

8

ein buildConfigField Hinzufügen schreibt einen Eintrag in der Datei BuildConfig.java und ist nicht dazu gedacht am buildscript Ebene ausgesetzt werden. Dies ist eine Möglichkeit, Metainformationen über einen spezifischen Build für den betroffenen Anwendungscode bereitzustellen - keinen anderen Buildscript-Code. Wenn Sie Namen auf der Buildscript-Ebene angeben möchten, müssen Sie die Eigenschaften von Gradle verwenden.

Wenn Sie explizit auf die BuildConfigField-Auflistung von Objekten an anderer Stelle in Ihrem Skript zugreifen möchten, können Sie das mit android.productFlavors.flavor1.buildConfigFields.

bearbeiten

Um einen bestimmten Geschmack Namen zu bekommen, wenn sie über android.applicationVariants.all laufen, können Sie die Aromen Sammlung wie so iterieren (beachten Sie die Sie iterieren nicht den Verweis auf das Element erfassen müssen, aber es ist lehrreich zu sehen, welche Objekte Sie zugreifen, tatsächlich):

task printFlavors << { 
    println "BuildTypes ⨯ Flavors:" 
    android.applicationVariants.all { variant -> 
     println name 
     variant.productFlavors.each { flavor -> 
      println flavor.name 
     } 
    } 
} 

Oder, wie von kcoppock vorgeschlagen, kann dies zu vereinfachen:

task printFlavorName << { 
    android.applicationVariants.all { 
     println flavorName 
    } 
} 
+0

Könnten Sie vorschlagen, was wäre der bevorzugte Weg, um den Produktgeschmacksnamen der aktuellen Variante zu referenzieren, wenn Sie über android.applicationVariants.all iterieren würden? – JohnRock

+0

Ähm Ich denke, es ist 'name'. – dcow

+0

Oh, ich sehe, was Sie jetzt wollen. 'name' bezieht sich auf die Variante. Um den Namen des Aromas zu erhalten, benötigen Sie etwas wie oben beschrieben. – dcow

0

Will gerne hinzufügen auf dcow Antwort.

Nach dem Geschmack bekommen, um das BuildConfig Feld zu erhalten:

variant.productFlavors.each { flavor -> 
    flavor.buildConfigFields.each { key, value -> 
     if(key == "APP_FLAVOR_NAME") { 
      println value.type 
      println value.name 
      println value.value 
     }  
    } 
} 

BuildConfigs ist definiert als letzte Klasse. Felder sind privat. Also nur schreibgeschützt.

Verwandte Themen