Вопрос

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

Это было полезно?

Решение

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 = "";
}

Другие советы

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 }

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

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'
  }
}

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

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 }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top