当前位置: 首页 > 知识库问答 >
问题:

BuildConfig无法从变量中正确创建值(Gradle Android)

龚铭
2023-03-14

使用构建类型为不同环境构建APK

我正在用这篇文章来构建我的apk,而不是android studio。除了在gradle中使用环境变量外,其他一切都正常:

在构建之前,我设置了环境变量

export MY_API_TOKEN="ABCDEFGH"

然后在我的build.gradle:

buildTypes {

  debug {
    buildConfigField("String", "MY_API_TOKEN", System.getenv('MY_API_TOKEN'))
  }

}

当我执行:gradle assemble时,我得到一个错误:

/home/apps/app/src/main/java/com/my/package/controller/api/MyAwesomeCode.java:64: error: cannot find symbol
                BuildConfig.MY_API_TOKEN;
                                  ^
  symbol:   variable BuildConfig
  location: class RestAPI
/home/apps/app/build/generated/source/buildConfig/debug/com/my/package/BuildConfig.java:14: error: cannot find symbol
  public static final String MY_API_TOKEN = ABCDEFGH;
                                               ^
  symbol:   variable ABCDEFGH
  location: class BuildConfig

我尝试了几种组合,但得到了相同的错误:

  • BuildConfig无法正确创建(Gradle Android)
  • BuildConfig变量。错误:找不到符号
  • https://medium.com/@rafamatias/gradle-android-build-变量-dod-right-d0c0e296ee93
  • Gradle:如何在Android库中使用BuildConfig,并在应用程序中设置标志

我还用html" target="_blank">变量验证了同样的行为

def MY_API_TOKEN_VAR = "ABCDEFGH"

debug {
  buildConfigField "String", "MY_API_TOKEN", MY_API_TOKEN_VAR
}

错误:

BuildConfig.java:14: error: cannot find symbol
public static final String MY_API_TOKEN = ABCDEFGH;
                                          ^
symbol:   variable ABCDEFGH
location: class BuildConfig

buildTypes仅适用于build中的硬编码值。格拉德尔?

共有1个答案

万知
2023-03-14

应使用转义引号中的字段值声明字符串类型的BuildConfig字段值:

android {
    ...
    defaultConfig {
        ...
        def MY_API_TOKEN_VAR = "ABCDEFGH"
        buildConfigField "String", "MY_API_TOKEN", "\"ABCDEFGH\""
    }
    ...
}

使用系统环境变量:

android {
    ...
    defaultConfig {
        ...
        def MY_API_TOKEN_VAR = System.getenv('MY_API_TOKEN')
        buildConfigField "String", "MY_API_TOKEN", "\"ABCDEFGH\""
    }
    ...
}

如果不在转义引号中声明字段值,则可以在生成的BuildConfig中看到语法错误:

public final class BuildConfig {
  // ...
  // Fields from build type: debug
  public static final String MY_API_TOKEN = ABCD; // Should be "ABCD"
}
 类似资料:
  • 我试图将我们的Android应用程序转换为gradle构建。我有这个项目,它的图书馆建设成功。我现在试图为我们的各种环境创建单独的apks(dev/test/prod对他们使用的restful服务有不同的网址)。 在四处搜索时,我觉得最好的方法是为每个环境制作不同的BuildConfig。这就是我所尝试的: 问题是,我的BuildConfig.java似乎没有注入静态变量,因此我得到类似于以下错误

  • 假设我有一个使用CustomObject列表的API操作。对于这些对象中的每一个,它都会调用一个创建Mono的服务方法。如何以一种惯用的无阻塞方式从这些单一对象创建流量? 我现在想到的是这个。我更改了方法名称,以更好地反映它们的预期目的。 此外,我需要订阅通量才能真正让它返回一些东西吗?

  • 本文向大家介绍如何从JavaScript中的变量值创建对象属性?,包括了如何从JavaScript中的变量值创建对象属性?的使用技巧和注意事项,需要的朋友参考一下 JS有2种用于创建对象属性的符号,即点符号和方括号符号。 要从变量创建对象属性,您需要通过以下方式使用方括号表示法- 示例 输出结果 这将给出输出- ES6引入了计算属性名称,您可以执行以下操作: 示例 输出结果 这将给出输出-

  • 测试变量的常用方法是检查它是否引用singletone: 根据PEP-8,建议将此方法作为检查的唯一方法: 与None之类的单例进行比较时,应始终使用is或is,永远不要使用相等运算符。 虽然有时我发现以下测试在不同的来源: 这种方式看起来不错,但是我不太明白为什么简单易读的结构可以被所取代。它在某些情况下更有用,还是指代码风格? UPD:使用我发现非常有用(到目前为止):

  • 我可以创建std::数组: 它很好用。但我无法创建向量: 这给了我一个错误: