106

我正在使用 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文件如下(in 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 = "";
}
4

26 回答 26

97

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

于 2015-09-23T11:47:25.787 回答
49

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

于 2014-08-27T02:54:29.720 回答
30

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

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

于 2016-03-06T08:20:17.433 回答
29

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

我忘记了转义字符。从改变:

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

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

解决了这个问题。

于 2017-10-19T14:00:16.913 回答
21

就我而言,在 Android Studio 中:

  1. 构建 -> 清理项目;

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

  3. 构建 -> 重建项目

于 2020-09-24T09:09:36.933 回答
20

我也遇到了同样的情况,在项目根目录中运行时修复:

./gradlew assembleDebug
于 2020-02-27T09:36:31.560 回答
17

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

在此处输入图像描述

于 2018-03-14T10:31:57.603 回答
16

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

在构建 gradle 文件中使用这个:

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

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

String myParam= BuildConfig.myParameter;

希望这会有所帮助,MA :)

于 2016-10-19T09:53:52.770 回答
13

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

谢谢。

于 2020-04-13T17:29:32.867 回答
10

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

android {
    buildFeatures {
        buildConfig = true
    }
}
于 2021-02-14T13:37:42.790 回答
7

在 Android Studio 中, - 单击 Build 然后 Clean Project - 清理后单击 Rebuild Project。- 完成后,关闭您的项目。- 再次打开您的项目并运行它,错误不应再次出现,它已清除。

于 2019-12-26T16:38:32.277 回答
5

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

所以尝试:

  • 单击BuildConfig.导致错误的代码部分。一条帮助消息应该出现在一个蓝色气泡中,上面写着:“ ? uk.co.package.app.BuildConfig? Alt + ENTER”单击它,Android Studio 会自动添加缺少的导入。或者
  • 在您的进口清单中添加import uk.co.package.app.BuildConfig;某处。

重新构建......它的工作原理!好吧,无论如何它对我有用。

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

于 2015-07-27T20:16:04.217 回答
5

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

所以为我解决问题的解决方案是,去

构建 > 制作模块“应用程序”

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

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

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

于 2021-03-24T18:31:58.390 回答
2

将此用于 Android X

import androidx.multidex.BuildConfig;

这对我有用。

于 2020-05-18T12:12:44.460 回答
2

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

于 2016-10-31T08:34:49.417 回答
2

就我而言,问题是我刚刚重命名了项目的一个模块,但该模块的名称引用并未在AndroidManifest.xml.

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

于 2016-04-07T14:47:13.400 回答
1

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

android{
buildFeatures{
    buildConfig = true
}}
于 2021-01-27T17:23:24.137 回答
1

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

或使用快捷键:Ctrl++ShiftF9

于 2020-11-07T11:25:29.177 回答
0

我的 2 美分:

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

于 2019-10-30T10:11:15.983 回答
0

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

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

于 2019-12-25T18:12:46.567 回答
0

就我而言,我通过复制和粘贴相同的变体犯了一个愚蠢的错误。我刚刚重命名了另一个变体,它起作用了。

在此处输入图像描述

于 2020-02-17T14:17:02.240 回答
0

可能的解决方案:如果您使用的是Android X 计费库,或许可以在文件中添加以下行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

因此,要修复,删除该 import 语句行,并重建以查看它是否可以正确解析BuildConfig.java。如果不能,您可能需要通过 an 显式命名它,import com.example.myapp.BuildConfig.java以使其非常清楚您想要从您的包中获取此文件的版本,而不是任何其他版本。

希望这可以帮助!

于 2020-03-26T00:46:33.873 回答
0

检查您的文件是否正在导入正确的 BuildConfig 类。如果正确,则清理或 File->InvalidateCaches 并重新启动。

于 2022-02-14T12:27:42.280 回答
0

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

于 2019-08-20T19:24:58.433 回答
0

就我而言,问题来自

import com.android.volley.BuildConfig;

确保你有BuildConfig从你的包中导入的权利,而不是从volley.

于 2021-08-23T15:48:23.427 回答
-1

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

于 2021-01-13T12:12:23.510 回答