【问题标题】:Gradle buildConfigField BuildConfig cannot resolve symbolGradle buildConfigField BuildConfig 无法解析符号
【发布时间】:2014-05-01 12:40:06
【问题描述】:

我正在使用 Gradle 构建我的 Android 应用程序。我正在尝试根据构建类型(发布或调试)使用一些标志。

我的 Gradle 文件如下所示:

android {
    buildTypes {
        debug {
            buildConfigField 'boolean', 'PREPROD', 'true'
            buildConfigField 'boolean', 'STAGING', 'false'
        }

        release {
            buildConfigField 'boolean', 'PREPROD', 'false'
            buildConfigField 'boolean', 'STAGING', 'false'
        }
    }
}

如果我尝试调用BuildConfig.PREPRODBuildConfig.STAGING,我会收到“无法解析符号”错误。 Gradle 同步成功,不知道是不是忘记了一些步骤才能使用这个功能?

生成的BuildConfig.java文件如下(在build/source/buildConfig/debug/com.example.myapp中):

package com.example.myapp;

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String PACKAGE_NAME = "com.example.myapp";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "";
  public static final int VERSION_CODE = 400;
  public static final String VERSION_NAME = "";
}

【问题讨论】:

  • 您能否检查是否创建了正确的 BuildConfig 类。它位于build/source/buildconfig/debug/...
  • 我将生成的BuildConfig.java 添加到我的问题中。
  • 您使用的是什么版本的插件?使用 0.9.1 我看不到这个(两个布尔值都出现在课堂上)。
  • 您不必同步(尽管 Studio 会要求您这样做,因为它不知道您是否更改了模型),但是您需要构建,因为生成了 BuildConfig 类在构建期间基于 build.gradle 文件中的内容。
  • 嗨,我通过配置设置在应用程序中管理两种风格,像你一样,我正在尝试创建一些配置变量,但风格不同。我尝试了您的方式,但在 flavor/BuildConfig.java 中没有看到任何更新,因此即使在编译时也无法访问变量。任何建议!

标签: android gradle buildconfig


【解决方案1】:

确保您的文件正在导入正确的 BuildConfig 类。有时如果您有其他项目库或模块,它可能会导入错误的 buildConfig。 确保您的导入类似于 com.project.app.BuildConfig。我遇到了同样的问题,问题是这样的,希望它可以帮助某人。

【讨论】:

  • 随着完整的 com.x.x 更改,我如何使用构建变体执行此操作?
  • @Zapnologica 构建变体应该对此没有影响。只要您在每个变体上定义了变量,就在 build.gradle 文件中。
  • 5 年后,我非常感谢您。就我而言,它使用的是 algoliasearch.BuildConfig,我什至没有导入它
  • 哇,还省了我一些头痛。就我而言,它使用的是:com.google.firebase.BuildConfig
  • 像魅力一样为我工作,更改了我的包名,这就是导致问题的原因。更新导入以匹配包名称,然后添加 .BuildConfig 为我修复了它。谢谢
【解决方案2】:

我遇到了同样的错误。 尝试点击save右侧的synchronize。 在 gradle sync 之后执行此操作。

【讨论】:

  • 同步在哪里?
  • 文件 > “将项目与 Gradle 文件同步”。
  • 谢谢先生!虽然不是同步按钮解决了我的问题,但我点击了无效缓存/重新启动,一切都恢复正常。
  • 使缓存无效并重新启动并没有为我做这件事。我必须清理然后重建,它可以工作
【解决方案3】:

gradle 构建文件的更改不会刷新 BuildConfig 类的生成,即使您单击顶部的黄色“立即同步”栏。 完全清理将强制生成此文件。

在 Android Studio 中: 构建 -> 清理项目

【讨论】:

    【解决方案4】:

    发生在我身上是因为我没有正确声明一个字符串字段。

    我忘记了转义字符。更改自:

    buildConfigField "String", "FOO", "foo"
    

    buildConfigField "String", "FOO", "\"foo\""
    

    解决了问题。

    【讨论】:

    【解决方案5】:

    同样的事情发生在我身上,在项目根目录中运行时已修复:

    ./gradlew assembleDebug
    

    【讨论】:

      【解决方案6】:

      就我而言,在 Android Studio 中:

      1. 构建 -> 清理项目;

      2. 文件 -> 使缓存无效/重新启动...

      3. 构建 -> 重建项目

      【讨论】:

      • 这是唯一对我有用的解决方案!
      【解决方案7】:

      确保将参数也添加到 defaultConfig。 您可能正在运行默认的 buildVarient,而您的参数是在特定的 buildVariant 中定义的。

      在构建 gradle 文件中使用:

       defaultConfig {
              buildConfigField('String' , 'myParameter', 'someValue')
          }
      

      然后,在代码中使用这个:

      String myParam= BuildConfig.myParameter;
      

      希望这会有所帮助, 硕士:)

      【讨论】:

      • 错误:找不到符号 jsonObject.put(PayuConstants.VERSION_KEY, BuildConfig.VERSION_NAME);我收到此错误
      【解决方案8】:

      您必须首先选择所需的构建变体才能访问其 buildConfigField

      【讨论】:

      • 这对我有帮助。我已经选择了一个构建变体,但更改它会导致重建导致错误消失。
      • 使用它会起作用 android{ buildFeatures{ buildConfig = true } }
      • 我没有从此处选择构建类型,而是将构建类型的名称更改为此处选择的名称。
      【解决方案9】:

      如果发生此类问题,只需清理并重建您的项目。

      谢谢。

      【讨论】:

        【解决方案10】:

        在 build.gradle(Module:App) 和 Rebuild Project 中添加以下内容

        android {
            buildFeatures {
                buildConfig = true
            }
        }
        

        【讨论】:

          【解决方案11】:

          在 Android Studio 中, - 点击构建然后清理项目 - 清理后单击重建项目。 - 完成后,关闭您的项目。 - 再次打开你的项目并运行它,错误应该不会再次出现,它已经清除了。

          【讨论】:

            【解决方案12】:

            这个问题已经让我发疯了一个多星期。就我而言,这是一个简单的导入缺失。我找了它,但不知何故在我找不到的文档中没有提到你需要在任何地方导入 BuildConfig 类!然而,这是合乎逻辑的。我继续相信它可能是自动的。好吧,它不是。

            所以尝试一下:

            • 单击一次BuildConfig. 导致错误的代码部分。帮助消息应出现在蓝色气泡中,内容如下: “? uk.co.package.app.BuildConfig? Alt + ENTER” 单击它,Android Studio 会自动添加缺少的导入。 或
            • 在导入列表中的某处添加import uk.co.package.app.BuildConfig;

            重新构建...它有效!好吧,反正对我有用。

            希望能帮助像我这样的另一个 gradle android 新手!

            【讨论】:

              【解决方案13】:

              我在这里尝试了所有方法,但没有任何效果。我最初遇到一个问题,即我所指的 BuildConfig 方法之一没有被检测到,所以我在这里尝试了一些解决方案。那只会更加破坏我的项目(或者我是这么认为的)。我尝试更改我的构建类型并最终遇到了 OP 提到的问题(这是我没有遇到的问题。我来到这里寻找另一个问题的解决方案并最终为自己创建了 OPs 问题facepalm)。

              所以为我解决问题的解决方案是,只需转到

              构建 > 制作模块“应用”

              不管我有多少红色标记,它都为我解决了所有问题。我什至无法导入我的项目的 BuildConfig,因为我尝试了这里的解决方案,解决了一个我没有遇到的问题(我很愚蠢,是的,我知道我在做什么)。我认为做一个干净的构建会进一步破坏事情。但这为我解决了一切。

              来源:https://tinaciousdesign.com/blog/buildconfig-debug-always-returns-false-android/

              TLDR:BuildConfig 是您项目中生成的类。如果 Android Studio 找不到它,它会提示您导入它。不要导入它,否则你会收到 lint 警告。像往常一样运行项目,忽略红色。你的问题应该解决了

              【讨论】:

              • 非常感谢,这是唯一对我有用的解决方案!
              • 谢谢兄弟。没有其他答案对我有用。我正在使用使用颤振,我需要为该导入设置一个风格对我不起作用。
              【解决方案14】:

              就我而言,问题在于我刚刚重命名了我的项目的一个模块,但该模块的名称引用并未在 AndroidManifest.xml 上自动更新。

              手动重命名并重建项目解决了这个问题。

              【讨论】:

              • 我做了一些重构,并没有完全改变所有的实例;这个答案为我指明了正确的方向。谢谢!
              • 同样的问题。尝试清理项目。重启安卓工作室。没有任何效果,错误仍然存​​在。然后我再次清理它(构建>清理项目)然后我强制运行调试。构建成功后错误消失。
              【解决方案15】:

              搜索出现的 BuildConfig。我有一个不存在的 BuildConfig 和编译器的恶意导入,而不是捕获指向其他地方的随机代码行!

              【讨论】:

                【解决方案16】:

                将此用于 Android X

                import androidx.multidex.BuildConfig;
                

                这对我有用。

                【讨论】:

                • 伟大的工作。这解决了我迁移到 androidX 后的问题
                【解决方案17】:

                通过右键单击您的模块并选择Rebuild Module 'module name'来重建您的模块

                或使用快捷键:Ctrl+Shift+F9

                【讨论】:

                  【解决方案18】:

                  如果构建配置在构建 Gradle 文件中没有得到解决,请使用以下代码并同步它将按预期工作

                  android{
                  buildFeatures{
                      buildConfig = true
                  }}
                  

                  【讨论】:

                  【解决方案19】:

                  我的包裹在我的清单中不是最新的。 我检查了文件 AndroidManifest.xml 并更正了我的包的名称。 我就是这样解决这个问题的。

                  【讨论】:

                    【解决方案20】:

                    我的 2 美分:

                    我有一个正确的import xxx.BuildConfig,AS 会指向那条线和我有BuildConfig.SOME_VARIABLE 的那些线,所以我删除了import 线,重建它,得到一个错误说BuildConfig is unrecognised reference blah blah 之后我导入它并重新构建它。

                    【讨论】:

                      【解决方案21】:

                      我在 Android Studio 中构建(调试)旧项目时遇到了同样的错误。 当我调查错误时,我发现 BuildConfig 类是在 2 个文件中定义的。第一个在 BuildConfig.java 中,第二个在 BuildConfig2.java 中。

                      我删除了文件之一,我工作正常。

                      【讨论】:

                      • 我删除了 BuildConfig.java 文件之一,然后项目构建成功并开始调试。
                      【解决方案22】:

                      在我的例子中,我犯了一个愚蠢的错误,复制并粘贴了相同的变体。我刚刚重命名了另一个变体并且它起作用了。

                      【讨论】:

                        【解决方案23】:

                        可能的解决方案:如果您使用的是Android X billing library,或许可以在您的build.gradle 文件中添加以下行:

                        implementation 'com.android.billingclient:billing:2.2.0'

                        请注意,Android 计费库还包含其自己的 BuildConfig 类,它可能会混淆 Android Studio 的代码编辑器。如果发生这种情况,它可能会自动将以下 import 语句添加到您的某个类中:

                        import com.android.billingclient.BuildConfig;

                        那不是你想用的,对吧?您想要使用的那个(如果您正在进行调试构建)可能在这里:

                        ./build/generated/source/buildConfig/debug/com/example/myapp/BuildConfig.java

                        所以要修复,删除该导入语句行,然后重建以查看它是否可以正确解析BuildConfig.java。如果不能,您可能需要通过 import com.example.myapp.BuildConfig.java 明确命名它,以明确您希望从您的包中获取此文件的版本,而不是其他任何版本。

                        希望这会有所帮助!

                        【讨论】:

                          【解决方案24】:

                          就我而言,问题来自于

                          import com.android.volley.BuildConfig;
                          

                          确保您已从包中导入正确的 BuildConfig,而不是从 volley

                          【讨论】:

                            【解决方案25】:

                            我想为这个问题添加另一个解决方案。我已经尝试了这篇文章的所有答案,但没有人提到在您更新系统变量后立即重新启动他们的机器。像魅力一样工作!

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 2018-11-11
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              • 1970-01-01
                              相关资源
                              最近更新 更多