gpt4 book ai didi

java - BuildConfig.DEBUG(或等效项)作为常量值

转载 作者:行者123 更新时间:2023-12-01 22:22:44 33 4
gpt4 key购买 nike

假设我有一个自定义注释:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Test {
boolean type();
}

我希望 type 参数根据构建类型而有所不同(但这会自动更改)。

所以我可以做一些类似的事情:

@Test(type = BuildConfig.DEBUG)
public class Example {
}

但是,Example 类的代码当然不会编译,因为 BuildConfig.DEBUG 的值不是常量。

有人知道为此创建解决方法吗?也许在 gradle 中指定一些其他参数?我对需要手动更改特定构建的 type 的解决方案不感兴趣。这样或那样。我正在寻找一种通过构建自动完成此操作的方法。

最佳答案

通过 gradle android 插件

您可以使用 gradle buildConfigField。例如

android {
...
buildTypes {
debug {
buildConfigField "boolean", "TYPE", "true"
}
release {
buildConfigField "boolean", "TYPE", "false"
}
...
}
}

然后

@Test(type = BuildConfig.TYPE)
public class Example {
}

使用buildConfigField,您还可以向 BuildConfig 添加其他类型。

android {
buildTypes {
debug {
buildConfigField "int", "A_INT", "1"
buildConfigField "String", "A_STRING", "\"string_1\"" // <---note the escape
}

release {
buildConfigField "int", "A_INT", "2"
buildConfigField "String", "A_STRING", "\"string_2\""
}
}
}

如果您有多种风格,则可以在每种风格中定义一个字段:

productFlavors {
// Define separate dev and prod product flavors.
dev {
buildConfigField "boolean", "IS_DEV", "true"
}

prod {
buildConfigField "boolean", "IS_DEV", "false"
}
}

使用相同的规则,您可以使用 resValue 在资源中添加值:

android {
buildTypes {
debug{
resValue "string", "dev_name", "Alice"
}

release {
resValue "string", "dev_name", "Bob"
}
}
}

通过代码

您可以将具有值的类放置在 src/debug/java/your.package.name 下,并将具有不同值的相同类放置在 src/release/java/your.package.name 下

调试版本

public final class MyConfigurations {
public static final boolean TYPE = true;
...
}

发布版本

public final class MyConfigurations {
public static final boolean TYPE = false;
...
}

您还可以使用与 android gradle 插件相同逻辑的口味(事实上,这个解决方案也取决于该插件)

关于java - BuildConfig.DEBUG(或等效项)作为常量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40721113/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com