Android using Gradle Build flavors in the code like an if case
BuildConfig.FLAVOR
gives you combined product flavor.So if you have only one flavor dimension:
productFlavors { normal { } admin { }}
Then you can just check it:
if (BuildConfig.FLAVOR.equals("admin")) { ...}
But if you have multiple flavor dimensions:
flavorDimensions "access", "color"productFlavors { normal { dimension "access" } admin { dimension "access" } red { dimension "color" } blue { dimension "color" }}
there are also BuildConfig.FLAVOR_access
and BuildConfig.FLAVOR_color
fields so you should check it like this:
if (BuildConfig.FLAVOR_access.equals("admin")) { ...}
And BuildConfig.FLAVOR
contains full flavor name. For example, adminBlue
.
To avoid plain string in the condition, you can define a boolean property:
productFlavors { normal { flavorDimension "access" buildConfigField 'boolean', 'IS_ADMIN', 'false' } admin { flavorDimension "access" buildConfigField 'boolean', 'IS_ADMIN', 'true' }}
Then you can use it like this:
if (BuildConfig.IS_ADMIN) { ...}
You can define either different build configuration fields or different resource values (like string values) per flavor, e.g. (as per Google's gradle tips and recipes), e.g.,
android { ... buildTypes { release { // These values are defined only for the release build, which // is typically used for full builds and continuous builds. buildConfigField("String", "BUILD_TIME", "\"${minutesSinceEpoch}\"") resValue("string", "build_time", "${minutesSinceEpoch}") ... } debug { // Use static values for incremental builds to ensure that // resource files and BuildConfig aren't rebuilt with each run. // If they were dynamic, they would prevent certain benefits of // Instant Run as well as Gradle UP-TO-DATE checks. buildConfigField("String", "BUILD_TIME", "\"0\"") resValue("string", "build_time", "0") } }}
So in this case, something like
productFlavors { normal { dimension "access" buildConfigField("boolean", "IS_ADMIN", "false") } admin { dimension "access" buildConfigField("boolean", "IS_ADMIN", "true") }}
and then use it like
if (BuildConfig.IS_ADMIN) { ...} else { ...}
or if it is just to have different string values for different flavors, it can be done with different resValues
and then you don't even need the if/then