2

build.gradle(模块):

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;
        }
    }
    ....
}

但它不起作用。有可能做我想做的事吗?如果是,那么如何?

4

2 回答 2

2

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

Java 中没有 ifdef 和 ifndef。

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

示例:
app/src/debug/java/my/package/MyEnum.java
app/src/beta/java/my/package/MyEnum.java

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

于 2019-08-20T10:45:14.787 回答
1

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

只需使用

if (BuildConfig.SHORT_ENUM){
  ...
}

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

  • 您可以在不同的 buildTypes 中使用 2 个不同的类。
  • 只需创建一个将根据条件返回值的方法
于 2019-08-20T10:28:02.887 回答