【发布时间】:2015-07-25 20:10:39
【问题描述】:
给定以下配置:
productFlavors {
normal {
applicationId "com.app"
}
mock {
applicationId "com.app.mock"
}
}
buildTypes {
debug {
productFlavors.normal.buildConfigField "boolean", "mockMode", "false"
productFlavors.mock.buildConfigField "boolean", "mockMode", "true"
}
release {
productFlavors.normal.buildConfigField "boolean", "mockMode", "false"
// Release should never point to mocks. Ever.
productFlavors.mock.buildConfigField "boolean", "mockMode", "false"
}
}
我原以为BuildConfig.mockMode = true;,但是,这是生成的构建配置:
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "*****";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "mock";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
// Fields from product flavor: mock
public static final boolean mockMode = false;
}
通过一些调查/调试,我意识到如果我在发布 buildType 中更改产品风味的值,它实际上会更新 BuildConfig.mockMode 值,尽管已选择 mockDebug 作为我的构建变体。
我已经有了更好的解决方案来实现我想做的事情,所以我只是在寻找一个答案,以帮助我理解为什么 Gradle 根据配置以这种方式行事,以帮助我更多地了解它在做什么。
【问题讨论】: