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

前端 未结 5 1071
别那么骄傲
别那么骄傲 2020-12-02 22:00

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

相关标签:
5条回答
  • 2020-12-02 22:14

    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

    0 讨论(0)
  • 2020-12-02 22:19

    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

    0 讨论(0)
  • 2020-12-02 22:35

    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'
      }
    }
    
    0 讨论(0)
  • 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 }
    
    0 讨论(0)
  • 2020-12-02 22:41

    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 = "";
    }
    
    0 讨论(0)
提交回复
热议问题