Gradle buildConfigField BuildConfig无法解析符号

Gaë*_*tan 66 android buildconfig gradle

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

我的Gradle文件如下所示:

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

        release {
            buildConfigField 'boolean', 'PREPROD', 'false'
            buildConfigField 'boolean', 'STAGING', 'false'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我试图打电话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 = "";
}
Run Code Online (Sandbox Code Playgroud)

Ket*_*ani 70

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

android {
    buildFeatures {
        buildConfig = true
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 谁在谷歌不断改变基本面却不告诉任何人?!最糟糕的是现代构建工具仍然会生成 BuildConfig 文件,如果没有这个标志 smdh,它只是无缘无故地对你的源代码不可见。 (2认同)

MRo*_*ues 66

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

  • 你救了我的一天!谢谢你,先生 ! (3认同)

bru*_*les 40

我得到了同样的错误.尝试单击" 保存 "右侧的" 同步".在gradle sync之后执行此操作.

  • 同步在哪里? (2认同)
  • 文件 >“将项目与 Gradle 文件同步”。 (2认同)
  • 使缓存无效并重新启动对我来说不起作用。我必须清理然后重建,它起作用了 (2认同)

svp*_*dga 20

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

./gradlew assembleDebug
Run Code Online (Sandbox Code Playgroud)


Lou*_*uis 17

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

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

buildConfigField "String", "FOO", "foo"
Run Code Online (Sandbox Code Playgroud)

buildConfigField "String", "FOO", "\"foo\""
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.


Moh*_*tol 15

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

在此处输入图片说明


djz*_*hao 14

就我而言,在 Android Studio 中:

  1. 构建 -> 清理项目;

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

  3. 构建 -> 重建项目


Max*_*Max 14

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

\n

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

\n

构建 > 制作模块 \'app\'

\n

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

\n

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

\n
\n

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

\n
\n


小智 13

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

在build gradle文件中使用:

 defaultConfig {
        buildConfigField('String' , 'myParameter', 'someValue')
    }
Run Code Online (Sandbox Code Playgroud)

然后,在代码中使用此:

String myParam= BuildConfig.myParameter;
Run Code Online (Sandbox Code Playgroud)

希望这有帮助,MA :)


小智 13

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

谢谢。


use*_*363 8

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

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


小智 7

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


Lit*_*ome 5

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

所以尝试:

  • 单击一次BuildConfig.导致错误的代码.帮助信息应出现在蓝色气泡中,例如:" ? uk.co.package.app.BuildConfig? Alt + ENTER"点击它,Android工作室会自动添加缺少的导入.要么
  • 添加import uk.co.package.app.BuildConfig;导入列表中的某个位置.

重建......它有效!好吧,无论如何它确实对我有用.

希望有助于另一个像我这样的机器人新手!


小智 5

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

这对我有用。