BuildConfigField 来决定如何定义成员(枚举)



build.gradle(Module(:

productFlavors {
mytest {
...
buildConfigField "boolean", "SHORT_ENUM", "false"
}
mysecondtest {
buildConfigField "boolean", "SHORT_ENUM", "true"
}

在MyClass中,我想根据我定义的buildConfigField在构建过程中定义枚举成员:

public class MyClass {
// members initialization
public enum MYENUM {
if (BuildConfig.SHORT_ENUM) {
FIRST(0),
SECOND(1);
}
else { // SHORT_ENUM is false
FIRST(0),
SECOND(1),
THIRD(2),
FORTH(3);
}
private int value;
MYENUM(int v) {
value = v;
}
}
....
}

但它不起作用。可以做我想做的事情吗?如果是,那怎么做?

您不能只在类定义中编写if语句。

Java中没有ifdef和ifndef。

您可以做的是为每个产品风格创建 java 代码文件夹,然后在每个文件夹中正确创建枚举定义。

example:
app/src/debug/java/my/package/MyEnum.java
app/src/beta/java/my/package/MyEnum.java

然后,当您构建调试时,它将使用调试版本,如果您构建测试版,它将使用测试版。

在这种情况下,BuildConfig.SHORT_ENUM是一个boolean

只需使用

if (BuildConfig.SHORT_ENUM){
...
}

无论如何,您都不能以这种方式做到这一点。 这取决于您希望如何使用它们。您有很多选择:

  • 您可以在不同的构建类型中使用 2 个不同的类。
  • 只需创建一个方法,该方法将根据条件返回值

最新更新