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


Answers:


126

查看生成的BuildConfig类。

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

因此,如果尚未构建您的应用程序,则该类将不存在,并且在构建该类之前使用该类会导致编译错误,不是吗?这不是鸡与蛋的情况吗?
AndroidDev 2015年

13
BuildConfig是在Gradle同步期间生成的,而不是应用程序本身的生成。
ashishduh's

7
友好的提醒,请为您的应用程序包而不是从外部库BuildConfig导入BulidConfig ...像我一样...
levibostian 2016年

3
PACKAGE_NAME似乎已被APPLICATION_ID
Rockhammer'1

29

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

在您的build.gradle文件中:

productFlavors {

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

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

要在您的代码中使用它:

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

3

您可以尝试

getPackageName(); 

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

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

3

这是定义和获取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


2

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

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


2
BuildConfig.BUILD_TYPE应该用于build变体。BuildConfig.FLAVOR应该用于您指定的任何口味。
Edric's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.