Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to access a buildConfigField elsewhere inside a gradle build file

I am trying to set a buildConfigField in my productFlavor block, and then reference that field elsewhere in my gradle build file so that I can use this value when constructing the name for my apk.

e.g

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

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

    }

How can I access APP_FLAVOR_NAME elsewhere in my build.gradle script?

I am also struggling to figure out how to just reference the flavor name itself in the buildscript as another option to constructing the apk name. How can I do that as well?

like image 859
JohnRock Avatar asked Apr 12 '14 01:04

JohnRock


1 Answers

Adding a buildConfigField writes an entry into your BuildConfig.java file and is not meant to be exposed at the buildscript level. This is a way provide meta-information about a specific build to interested application code -- not other buildscript code. If you want to throw names around at the buildscript level, you'll need to use Gradle properties.

Explicitly, if you want to access the BuildConfigField collection of objects elsewhere in your script, you can with android.productFlavors.flavor1.buildConfigFields.

Edit

To get a specific flavor name when iterating over android.applicationVariants.all, you can iterate over the flavors collection like so (note you don't need to capture the reference to the item you are iterating over, but it is instructive to see what objects you are actually accessing):

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

Or, as suggested by kcoppock, this can be simplified to:

task printFlavorName << {
    android.applicationVariants.all {
        println flavorName
    }
}
like image 193
dcow Avatar answered Sep 20 '22 17:09

dcow