質問

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