Gradle buildConfigField BuildConfig无法解析符号


81

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

我的Gradle文件如下所示:

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

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

并且,如果我尝试致电,BuildConfig.PREPROD或者BuildConfig.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 = "";
}

您可以检查是否创建了正确的Bui​​ldConfig类。它应该位于build/source/buildconfig/debug/...
Xavier Ducrohet 2014年

我将生成的添加BuildConfig.java到我的问题。
盖坦2014年

您正在使用哪个版本的插件?使用0.9.1时,我看不到(两个布尔值都出现在类中)。
Xavier Ducrohet 2014年

4
您不必进行同步(尽管Studio会要求您执行此操作,因为它不知道您是否更改了模型),但是您将需要进行构建,因为BuildConfig类是根据构建过程中的内容生成的build.gradle文件。
Xavier Ducrohet 2014年

2
嗨,我通过配置设置来管理应用程序中的两种口味,就像您一样,我试图创建一些配置变量,但是口味不同。我尝试了您的方法,但是在flavour / BuildConfig.java中没有看到任何更新,因此即使在编译时也无法访问变量。任何建议!
CoDe

Answers:


83

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


2
你救了我的一天!谢谢你,先生 !
阿斯提安

1
@Astyan很高兴我可以提供帮助。
MRodrigues

当完整的com.xx更改时,我该如何使用build vairents?
Zapnologica

@Zapnologica构建变体对此应该没有影响。只要您在build.gradle文件的每个变量上定义了变量。
MRodrigues

5年后,我要多谢您。在我的情况下,它是使用algoliasearch.BuildConfig没有我,甚至将其导入
dustytrash

44

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


8
同步在哪里?
Lucky_girl

25

发生我的原因是我没有正确声明String字段。

我忘记了转义字符。从:

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

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

解决了问题。


这就是给我的!谢谢!有时确实是那些该死的小事情:)
MacD

23

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

在Android Studio中:Build-> Clean Project


16

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

在构建gradle文件中使用以下命令:

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

然后,在代码中使用以下代码:

String myParam= BuildConfig.myParameter;

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


13

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

./gradlew assembleDebug


11

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

谢谢。


5

同样的问题已经使我发疯了一个多星期。就我而言,这是一个简单的导入丢失。我在寻找它,但是在某种程度上我找不到的文档中提到您需要在任何地方导入BuildConfig类!然而,这是合乎逻辑的。我继续相信这可能是自动的。好吧,这不是。

因此,请尝试:

  • BuildConfig.导致错误的部分代码上单击一次。帮助消息应显示在蓝色气泡中,并显示类似以下内容:“ ? uk.co.package.app.BuildConfig? Alt + ENTER”单击它,Android Studio会自动添加丢失的导入。要么
  • import uk.co.package.app.BuildConfig;在您的导入列表中添加某处。

重新构建...有效!好吧,反正对我也有帮助。

希望可以帮助像我这样的另一位gradle android新手!


4

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


2

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

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


我做了一些重构,没有完全改变所有实例。这个答案为我指明了正确的方向。谢谢!
Cezille07 '19

同样的问题。尝试清理项目。重新启动android studion。没有任何效果,错误仍然存​​在。然后我又清理了一次(构建>清理项目),然后强行运行调试。构建成功后,错误消失了。
酋长

2

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


2

就我而言,在Android Studio中:

  1. 建立->清洁项目;

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

  3. 生成->重建项目


0

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


0

我的2美分:

我有一个正确的提示import xxx.BuildConfig,AS会指向该行以及我所在的行BuildConfig.SOME_VARIABLE,因此我删除了import行,对其进行了重新构建,出现了一个错误,BuildConfig is unrecognised reference blah blah然后输入并重新构建。


0

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

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


我删除了BuildConfig.java文件之一,然后成功构建项目并开始调试。
Alok Kumar


0

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

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

请注意,Android计费库ALSO包含自己的 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以使其非常清晰,您希望从软件包中获得此文件的版本,而不是其他任何版本。

希望这可以帮助!



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.