Gradle buildConfigField BuildConfig无法解析符号

时间:2014-03-24 08:47:16

标签: android gradle buildconfig

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

My Gradle文件如下所示:

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

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

如果我尝试拨打BuildConfig.PREPRODBuildConfig.STAGING,我会收到#34;无法解析符号"错误。 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 = "";
}

23 个答案:

答案 0 :(得分:62)

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

答案 1 :(得分:39)

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

答案 2 :(得分:16)

发生在我身上,因为我没有正确地声明一个String字段。

我忘记了逃脱的角色。改变自:

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

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

解决了这个问题。

答案 3 :(得分:14)

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

./gradlew assembleDebug

答案 4 :(得分:13)

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

构建gradle文件中的

使用:

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

然后,在代码中使用:

String myParam= BuildConfig.myParameter;

希望这有帮助, M.A :)

答案 5 :(得分:11)

如果发生这种类型的问题,请清理并重建您的项目。

谢谢。

答案 6 :(得分:6)

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

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

答案 7 :(得分:5)

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

所以试试:

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

重建......它有效!好吧,无论如何它确实适合我。

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

答案 8 :(得分:4)

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

enter image description here

答案 9 :(得分:4)

就我而言,在Android Studio中:

  1. 构建->清理项目;

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

  3. 构建->重建项目

答案 10 :(得分:3)

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

android {
    buildFeatures {
        buildConfig = true
    }
}

答案 11 :(得分:2)

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

答案 12 :(得分:1)

在我的情况下,问题是我刚刚重命名了我的项目的模块,但该模块的名称引用未在AndroidManifest.xml上自动更新。

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

答案 13 :(得分:0)

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

android{
buildFeatures{
    buildConfig = true
}}

答案 14 :(得分:0)

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

来重建模块

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

答案 15 :(得分:0)

将其用于Android X

import androidx.multidex.BuildConfig;

这对我有用。

答案 16 :(得分:0)

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

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

构建 > 制作模块“应用”

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

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

<块引用>

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

答案 17 :(得分:0)

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

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

请注意,Android计费库ALSO还包含其 own 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对其进行明确命名,以使其非常清晰,您希望从软件包中获取此文件的版本,而不是其他任何版本。

希望这会有所帮助!

答案 18 :(得分:0)

在我的情况下,我犯了一个愚蠢的错误,即复制并粘贴了相同的变量。。我刚刚重命名了另一个变量,它就起作用了。

enter image description here

答案 19 :(得分:0)

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

答案 20 :(得分:0)

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

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

答案 21 :(得分:0)

我的2美分:

我有一个正确的<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src='https://cdn.jsdelivr.net/npm/vue/dist/vue.js' defer></script> <script src='testing.js' defer></script> </head> <body> <div id='app' v-cloak> <button v-on:click=startLoad>Start Load</button> <button v-on:click=printData>Print Data</button> Person Info: {{persons}} </div> </body>,AS会指向该行以及我拥有import xxx.BuildConfig的那些行,因此我删除了BuildConfig.SOME_VARIABLE行,对其进行了重新构建,并出现一条错误消息,指出import之后,我将其导入并重新构建。

答案 22 :(得分:0)

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