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个回答

1

移除生成的BuildConfig并进行同步+重建项目

enter image description here


你觉得我清理的时候已经删除了那个文件吗?重建是正确的做法! - FrankKrumnow
仅清理不起作用时添加新的buildConfigField,因此在某些情况下需要手动进行清理。 - Houssin Boulla

1
gradle.properties文件中添加以下行,当您使用Android 13更新项目时,它将非常好用。
android.defaults.buildfeatures.buildconfig=true

0
在我的情况下,我犯了一个愚蠢的错误,就是复制并粘贴相同的变量。我只是将另一个变量重命名,然后它就可以工作了。

enter image description here


0

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

我删除了其中一个文件,然后它就可以正常工作了。


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

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

为了修复问题,请删除该导入语句,并重新构建以查看是否可以解析到正确的 BuildConfig.java。如果不能,则可能需要通过 import com.example.myapp.BuildConfig.java 显式命名它,以确保你想要从自己的包中使用这个文件的版本,而不是其他任何版本。

希望能够帮到你!


0

我的两分钱:

我有一个正确的import xxx.BuildConfig,AS会指向那一行以及我有BuildConfig.SOME_VARIABLE的那些行,所以我删除了import行,重新构建它,得到一个错误,说BuildConfig是无法识别的引用blah blah,然后我再次导入并重新构建它。


0

请确保您的包名称与 Build.Gradle 文件中的应用程序 ID 匹配

只需更改并同步即可,它将为您执行必要的导入操作。

祝您好运


0

在我的情况下,当我向包添加了一个额外的级别/文件夹,并将com.xxx.BuildConfig更改为com.xxx.mynewfoldername.BuildConfig后,它就运行正常。


0
在我的情况下,问题来自于
import com.android.volley.BuildConfig;

确保您从您的包中导入正确的BuildConfig,而不是从volley导入。

0

检查一下你的文件是否正在导入正确的BuildConfig类。如果是正确的,请清理或者选择文件->无效缓存并重新启动。


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