Reputation: 19848
I'd like to get the build variant during runtime, is this possible without any extra config or code?
Upvotes: 112
Views: 53416
Reputation: 47
you can check direct with BuildConfig and your config name in everwhere, BuildConfig has already BuildType
if(BuildConfig.BUILD_TYPE == "release"){// TODO}
if(BuildConfig.BUILD_TYPE == "staging"){ //TODO }
if(BuildConfig.BUILD_TYPE == "debug"){ //TODO }
Upvotes: 2
Reputation: 6699
Look at the generated BuildConfig
class.
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.example.app";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "";
}
Upvotes: 171
Reputation: 473
If you are already flavoring then no need to provide extra string field in your gradle. Just follow simple steps to get the build details:
For build variant : BuildConfig.FLAVOR
For build version code : BuildConfig.VERSION_CODE
For build version name : BuildConfig.VERSION_NAME
Upvotes: 6
Reputation: 60913
Here is an example to define and get BuildConfig
for different flavor
android {
defaultConfig {
...
buildTypes {
...
}
flavorDimensions "default"
productFlavors {
develop {
applicationIdSuffix ".dev"
versionNameSuffix "-dev"
}
staging {
applicationIdSuffix ".stg"
versionNameSuffix "-stg"
}
production {
applicationIdSuffix ""
versionNameSuffix ""
}
}
applicationVariants.all { variant ->
def BASE_URL = ""
if (variant.getName().contains("develop")) {
BASE_URL = "https://localhost:8080.com/"
} else if (variant.getName().contains("staging")) {
BASE_URL = "https://stagingdomain.com/"
} else if (variant.getName().contains("production")) {
BASE_URL = "https://productdomain.com/"
}
variant.buildConfigField "String", "BASE_URL", "\"${BASE_URL}\""
}
}
Using
BuildConfig.BASE_URL
Upvotes: 7
Reputation: 3461
Another option would be to create a separate build config variable for each build variant and use it in your code like this:
In your build.gradle file:
productFlavors {
production {
buildConfigField "String", "BUILD_VARIANT", "\"prod\""
}
dev {
buildConfigField "String", "BUILD_VARIANT", "\"dev\""
}
}
To use it in your code:
if (BuildConfig.BUILD_VARIANT.equals("prod")){ // do something cool }
Upvotes: 43
Reputation: 214
You can try with
getPackageName();
it will return what you've defined in build.gradle
productFlavours{
flavour1{
applicationId 'com.example.package.flavour1'
}
flavour2{
applicationId 'com.example.package.flavour2'
}
}
Upvotes: 5