Tyler
Tyler

Reputation: 19848

How to get the build variant at runtime in Android Studio?

I'd like to get the build variant during runtime, is this possible without any extra config or code?

Upvotes: 112

Views: 53416

Answers (6)

sevki.ctnr
sevki.ctnr

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

ashishduh
ashishduh

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

Anurag Srivastava
Anurag Srivastava

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

Linh
Linh

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

checkmate711
checkmate711

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

yeberiah
yeberiah

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

Related Questions