【发布时间】:2014-06-19 07:51:53
【问题描述】:
我想在运行时获取构建变体,这可以在没有任何额外配置或代码的情况下实现吗?
【问题讨论】:
-
仅检查是否调试,
if (BuildConfig.DEBUG) {}
标签: android android-studio android-gradle-plugin
我想在运行时获取构建变体,这可以在没有任何额外配置或代码的情况下实现吗?
【问题讨论】:
if (BuildConfig.DEBUG) {}
标签: android android-studio android-gradle-plugin
查看生成的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 = "";
}
【讨论】:
PACKAGE_NAME 好像已经被APPLICATION_ID取代了
BuildConfig 消失了。它被称为 BuildConfig 是有原因的
如果您已经在调味,则无需在您的 gradle 中提供额外的字符串字段。只需按照简单的步骤获取构建详细信息:
对于构建变体:BuildConfig.FLAVOR
对于构建版本代码:BuildConfig.VERSION_CODE
对于构建版本名称:BuildConfig.VERSION_NAME
【讨论】:
BuildConfig.BUILD_TYPE 应该用于构建变体。 BuildConfig.FLAVOR 应该用于您指定的任何风味。
这里是一个示例,用于定义和获取 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
【讨论】:
另一种选择是为每个构建变体创建一个单独的构建配置变量,并在您的代码中使用它,如下所示:
在您的 build.gradle 文件中:
productFlavors {
production {
buildConfigField "String", "BUILD_VARIANT", "\"prod\""
}
dev {
buildConfigField "String", "BUILD_VARIANT", "\"dev\""
}
}
在您的代码中使用它:
if (BuildConfig.BUILD_VARIANT.equals("prod")){ // do something cool }
【讨论】:
你可以试试
getPackageName();
它将返回您在 build.gradle 中定义的内容
productFlavours{
flavour1{
applicationId 'com.example.package.flavour1'
}
flavour2{
applicationId 'com.example.package.flavour2'
}
}
【讨论】: