如何在Android Studio中的运行时获取构建变体?

时间:2014-05-02 15:10:00

标签: android android-studio android-gradle

我想在运行时获取构建变体,这可能没有任何额外的配置或代码吗?

5 个答案:

答案 0 :(得分:84)

查看生成的BuildConfig类。

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLCATION_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 = "";
}

答案 1 :(得分:14)

另一种选择是为每个构建变体创建一个单独的构建配置变量,并在代码中使用它,如下所示:

在build.gradle文件中:

productFlavors {

    production {
        buildConfigField "String", "BUILD_VARIANT", "\"prod\""
    }

    dev {
        buildConfigField "String", "BUILD_VARIANT", "\"dev\""
    }       
}

在您的代码中使用它:

if (BuildConfig.BUILD_VARIANT.equals("prod")){ // do something cool }

答案 2 :(得分:3)

您可以尝试使用

getPackageName(); 

它将返回您在build.gradle中定义的内容

productFlavours{
  flavour1{
     applicationId 'com.example.package.flavour1'
  }
  flavour2{
     applicationId 'com.example.package.flavour2'
  }
}

答案 3 :(得分:0)

以下是定义和获取BuildConfig不同口味的示例

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}\""

    }
}

使用

BuildConfig.BASE_URL

答案 4 :(得分:0)

如果您已经在调味,则无需在gradle中提供额外的字符串字段。只需按照简单的步骤来获取构建详细信息:

  

对于构建版本: BuildConfig.FLAVOR
  对于构建版本代码: BuildConfig.VERSION_CODE
  对于构建版本名称: BuildConfig.VERSION_NAME