2014-04-12 9 views
9

Sto provando a impostare un buildConfigField nel mio blocco ProductPlavor, quindi faccio riferimento a quel campo altrove nel mio file build gradle in modo che possa usare questo valore quando costruisco il nome per il mio apk.Come accedere a un buildConfigField altrove all'interno di un file di build gradle

es

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

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

    } 

Come posso accedere APP_FLAVOR_NAME altrove nel mio script build.gradle?

Sto anche cercando di capire come fare semplicemente riferimento al nome del gusto stesso nel buildscript come un'altra opzione per la costruzione del nome apk. Come posso farlo anche io?

risposta

8

Aggiunta di un buildConfigField scrive una voce nel file BuildConfig.java e non è destinato a essere esposti a livello buildscript. Questo è un modo per fornire meta-informazioni su una build specifica al codice dell'applicazione interessato - non un altro codice buildscript. Se vuoi lanciare i nomi a livello di buildscript, devi usare le proprietà Gradle.

In modo esplicito, se si desidera accedere alla raccolta di oggetti BuildConfigField altrove nello script, è possibile con android.productFlavors.flavor1.buildConfigFields.

Modifica

Per ottenere un nome di sapore specifico quando l'iterazione di android.applicationVariants.all, è possibile iterare la collezione sapori in questo modo (si noti che non è necessario per catturare il riferimento alla voce che si effettua l'iterazione, ma è istruttivo vedere quali oggetti sono in realtà accede):

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

Oppure, come suggerito da kcoppock, questo può essere semplificata per:

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

Puoi suggerire quale sarebbe il modo migliore per fare riferimento al nome del gusto del prodotto della variante corrente se stavi iterando su android.applicationVariants.all? – JohnRock

+0

Um Penso che sia 'name'. – dcow

+0

Oh, vedo quello che vuoi ora. 'nome' si riferisce alla variante. Per ottenere il nome di sapore, avresti bisogno di qualcosa come la modifica sopra. La variante – dcow

0

Si desidera aggiungere alla risposta dcow.

Dopo avere ottenuto il sapore, per ottenere il campo BuildConfig:

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

BuildConfigs sono definiti come una classe finale. I campi sono privati. Quindi solo di sola lettura.

Problemi correlati