Gradle buildConfigField BuildConfig 无法解析符号。

142

我正在使用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/...目录下。 - Xavier Ducrohet
我把生成的 BuildConfig.java 添加到了我的问题中。 - Gaëtan
4
虽然Studio会要求您同步(因为它不知道您是否更改了模型),但您不需要进行同步,但您需要构建,因为BuildConfig类是根据build.gradle文件中的内容在构建过程中生成的。 - Xavier Ducrohet
2
嗨,我正在通过配置设置管理应用程序中的两种风格,就像您一样,我正在尝试创建一些配置变量,但是针对不同的风格。我尝试了您的方法,但在风格/BuildConfig.java中没有看到任何更新,因此甚至无法在编译时访问变量。有什么建议! - CoDe
在菜单中,尝试选择“构建” => “生成项目”。 对我来说,就是这么简单 :-) - undefined
显示剩余7条评论
32个回答

13

我尝试了这里的所有方法,但都没有解决我的问题。起初,我遇到了一个问题,即我引用的BuildConfig中的某个方法无法被检测到,因此我尝试了这里的一些解决方案。结果只是让我的项目变得更糟(或者我是这样认为的)。我尝试改变我的构建类型,最终出现了OP提到的问题(这是我没有遇到的问题。我来这里寻找解决其他问题的方法,结果却为自己创建了OP的问题facepalm)。

所以对我有用的解决方案是,只需转到

Build > Make Module 'app'

无论我有多少红色标记指示,它都可以为我解决所有问题。在我尝试了这里的解决方案之后,我甚至无法将我的项目的BuildConfig导入到一个我没有遇到的问题上(我很蠢,不知道自己在做什么)。我认为进行干净的构建会进一步破坏事情。但这为我解决了一切。

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

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


谢谢兄弟。其他答案都对我没用。我正在使用Flutter,需要为它设置一种口味,但是导入不起作用。 - SoloWolf93

7
在Android Studio中, - 点击 “Build” 再选择 “Clean Project” - 清理完成后,点击 “Rebuild Project”。 - 当重建完成后,关闭项目。 - 再次打开项目并运行,错误应该不会再次出现,已经被清除了。

5
同样的问题让我苦恼了一周多。在我的情况下,问题很简单,只是缺少了一个导入。尽管我一直在寻找它,但在文档中却无处提到需要在任何地方导入BuildConfig类!然而,这是合乎逻辑的。我一直以为它可能是自动的。但是,它并不是自动的。
因此,请尝试以下两种方法之一:
1. 单击代码中引起错误的BuildConfig代码部分一次。应该会出现一个帮助消息,提示“?uk.co.package.app.BuildConfig?Alt+ENTER”,然后点击它,Android Studio将自动添加缺少的导入。
2. 在导入列表的某个地方添加"import uk.co.package.app.BuildConfig;"。
重新构建一下......它工作了!至少对我来说是这样的。
希望这能对像我这样的Gradle Android新手有所帮助!

5
  1. 构建 -> 清理项目;
  2. 文件 -> 无效的缓存 / 重启
  3. 构建 -> 重新构建项目
  4. 将Gradle项目与项目文件同步

这个方法对我有效。


1
经过9年多和众多版本的Android和Android Studio,这个可怕的错误仍然存在。而且这似乎是唯一的解决方法。(也许只需重新构建有时会起作用) - FrankKrumnow
只需要执行“构建->重新构建项目”就可以了,这对我起到了作用。谢谢Daxxtropezz。 - undefined

3
使用此代码适用于 Android X。
import androidx.multidex.BuildConfig;

这对我来说可行。


1
干得好。在我迁移到androidX后,这解决了问题。 - Adarsh Vijayan P

3
如果构建Gradle文件中的Build配置未能解析,请使用以下代码并同步,它将按预期工作。
android{
buildFeatures{
    buildConfig = true
}}

缩进不正确。这个答案更好:https://dev59.com/ZWEh5IYBdhLWcg3wRRqh#66195950 - Adam Burley

2
在我的情况下,问题是我刚刚重命名了项目中的一个模块,但该模块名称的引用未在AndroidManifest.xml中自动更新。手动更名并重新构建项目解决了这个问题。

我进行了一些重构,但并没有完全更改所有实例;这个答案指引了我正确的方向。谢谢! - Cezille07
同样的问题。尝试清理项目。重新启动Android Studio,但仍然无法解决错误。然后我再次清理了它(Build > Clean Project),然后强制运行调试。在构建完成后,成功解决了错误。 - Chief

2

搜索BuildConfig的出现情况。我导入了一个不存在的BuildConfig,编译器没有捕获到这个问题,而是指向了其他随机代码行!


1

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


1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接