首页 > 解决方案 > BuildConfig 无法从变量中正确创建值(Gradle Android)

问题描述

目标

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

方法

我正在使用这篇文章在没有 android studio 的情况下构建我的 apk。一切正常,除了我在 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

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

我还用变量验证了相同的行为

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.gradle 中的硬编码值?

标签: androidandroid-studio

解决方案


假设给定export MY_API_TOKEN="ABC"(请确保变量对您选择的构建系统可见)并且您的配置配置如下:

buildConfigField("String", "MY_API_TOKEN", "\"" + System.getenv("MY_API_TOKEN") + "\"")

...您的 BuildConfig 类将在同步/重建后有这个额外的字段:

public static final String MY_API_TOKEN = "ABC";

推荐阅读