Gradle buildConfigField BuildConfig не может разрешить символ

Я использую 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 = "";
}

person Gaëtan    schedule 24.03.2014    source источник
comment
Можете ли вы проверить, что был создан правильный класс BuildConfig. Он будет расположен в build/source/buildconfig/debug/...   -  person Xavier Ducrohet    schedule 24.03.2014
comment
Я добавил сгенерированный BuildConfig.java к своему вопросу.   -  person Gaëtan    schedule 24.03.2014
comment
Какую версию плагина вы используете? В версии 0.9.1 я этого не вижу (оба логических значения отображаются в классе).   -  person Xavier Ducrohet    schedule 24.03.2014
comment
Да, я использую плагин версии 0.9.1. Но я просто заметил, что если я запускаю свое приложение, поля доступны в BuildConfig.java. Это нормальное поведение? Сначала синхронизируйте Gradle, а затем запустите проект, чтобы получить доступ к новым полям?   -  person Gaëtan    schedule 24.03.2014
comment
Вам не нужно синхронизировать (хотя Studio попросит вас сделать это, потому что она не знает, изменили ли вы модель), но вам нужно будет выполнить сборку, поскольку класс BuildConfig создается во время сборки на основе того, что находится в build.gradle файл.   -  person Xavier Ducrohet    schedule 24.03.2014
comment
Да, вы правы, достаточно построить проект. Теперь он отлично работает. Спасибо!   -  person Gaëtan    schedule 24.03.2014
comment
Это случается и со мной, когда я использую последний плагин и строю проект. Вы снова сталкивались с этой проблемой?   -  person Bogdan Zurac    schedule 13.06.2014
comment
Нет, больше никогда не было этой проблемы.   -  person Gaëtan    schedule 02.08.2014
comment
Привет, я управляю двумя вариантами в приложении через настройки конфигурации, и, как и вы, я пытаюсь создать некоторую переменную конфигурации, но для другого вкуса. Я пробовал ваш способ, но не увидел никаких обновлений в Flavour / BuildConfig.java и из-за этого не смог получить доступ к переменной даже во время компиляции. Любое предложение !   -  person CoDe    schedule 09.08.2015


Ответы (24)


Убедитесь, что ваш файл импортирует правильный класс BuildConfig. Иногда, если у вас есть другие библиотеки или модули проекта, он может импортировать неправильный buildConfig. Убедитесь, что ваш импорт выглядит так: com.project.app.BuildConfig. У меня была такая же проблема, и проблема заключалась в следующем. Надеюсь, это может кому-то помочь.

person MRodrigues    schedule 23.09.2015
comment
Ты спас мне день! Спасибо, сэр ! - person Astyan; 03.11.2016
comment
@ Астян рад, что смог помочь. - person MRodrigues; 07.11.2016
comment
как мне сделать это с помощью сборки vairents, когда изменяется полный com.x.x? - person Zapnologica; 11.10.2018
comment
Варианты сборки @Zapnologica не должны на это влиять. Если у вас есть переменные, определенные для каждого варианта, в файле build.gradle. - person MRodrigues; 12.10.2018
comment
5 лет спустя, и я должен вам большое спасибо. В моем случае он использовал algoliasearch.BuildConfig, и я даже не импортировал его - person dustytrash; 25.01.2020
comment
Вау, еще избавил меня от головной боли. В моем случае он использовал: com.google.firebase.BuildConfig - person Kenneth Browning; 12.03.2020
comment
Сработал для меня как шарм, изменил имя моего пакета, и это стало причиной проблемы. Обновление импорта для соответствия имени пакета с последующим добавлением .BuildConfig исправило это для меня. Спасибо - person cherucole; 13.03.2020
comment
ошибка: не удается найти символ jsonObject.put (PayuConstants.VERSION_KEY, BuildConfig.VERSION_NAME); Я получаю эту ошибку. Что именно мне нужно делать? - person Supriya Gorai; 10.05.2021
comment
Да пребудет с тобой удача !! - person amtrax; 14.07.2021

У меня была такая же ошибка. Попробуйте нажать синхронизировать справа от сохранения. Сделайте это после синхронизации gradle.

person brunodles    schedule 27.08.2014
comment
Где синхронизировать? - person Lucky_girl; 02.02.2018
comment
Файл ›Синхронизировать проект с файлами Gradle. - person Chase Roberts; 09.01.2021
comment
Спасибо, сэр! Хотя мою проблему решила не кнопка синхронизации, я нажал «Недействительные кеши / перезапуск», и все вернулось в норму. - person CropP; 29.04.2021

Изменения в файлах сборки gradle не обновляют генерацию класса BuildConfig, даже если вы щелкнете желтую панель «синхронизировать сейчас» вверху. Полная очистка заставит сгенерировать этот файл.

В Android Studio: Сборка -> Чистый проект

person user465363    schedule 06.03.2016

Произошло со мной, потому что я неправильно объявил поле String.

Я забыл убегающие символы. Переход с:

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

to

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

решил проблему.

person Louis    schedule 19.10.2017
comment
Это было для меня! Спасибо! Иногда это действительно те проклятые мелочи :) - person MacD; 09.07.2020

То же самое случилось со мной, исправлено при запуске этого в корне проекта:

./gradlew assembleDebug
person svprdga    schedule 27.02.2020

Убедитесь, что вы добавили свой параметр также в файл defaultConfig. Вероятно, вы используете buildVarient по умолчанию, в то время как ваш параметр определен в конкретном buildVariant.

в файле сборки gradle используйте это:

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

Затем в коде используйте это:

String myParam= BuildConfig.myParameter;

Надеюсь, это поможет, M.A :)

person MoranAk    schedule 19.10.2016
comment
ошибка: не удается найти символ jsonObject.put (PayuConstants.VERSION_KEY, BuildConfig.VERSION_NAME); Я получаю эту ошибку - person Supriya Gorai; 10.05.2021

Вы должны сначала выбрать желаемый вариант сборки, чтобы иметь доступ к его buildConfigField.

введите описание изображения здесь

person Mohammad Alotol    schedule 14.03.2018
comment
Это мне помогло. У меня уже был выбран вариант сборки, но его изменение привело к перестройке, в результате которой ошибка исчезла. - person LarsH; 03.03.2020
comment
Используйте это, чтобы работать с Android {buildFeatures {buildConfig = true}} - person Nithin Raja; 27.01.2021
comment
Вместо выбора типа сборки здесь я изменил имя типа сборки на то, что здесь выбрано. - person Hüseyin Bülbül; 24.02.2021

если возникает проблема такого типа, просто очистите и перестройте свой проект.

благодаря.

person mehmoodnisar125    schedule 13.04.2020

В моем случае в Android Studio:

  1. Сборка - ›Чистый проект;

  2. Файл - ›Недействительные кеши / перезагрузка ...

  3. Сборка - ›Проект восстановления

person djzhao    schedule 24.09.2020
comment
Это единственное решение, которое у меня сработало! - person Adam Burley; 18.05.2021

В Android Studio - нажмите «Сборка», затем «Очистить проект» - после очистки нажмите «Восстановить проект». - Когда закончите, закройте свой проект. - Снова откройте свой проект и запустите его, ошибка больше не должна появляться, она исчезла.

person tshele litabe    schedule 26.12.2019

Эта же проблема сводила меня с ума уже больше недели. В моем случае это был простой импорт. Я искал его, но почему-то нигде в документации, которую я смог найти, не упоминается, что вам нужно импортировать класс BuildConfig куда угодно! И все же это логично. Я продолжал верить, что это могло произойти автоматически. Ну, это НЕ.

Так что попробуйте:

  • щелкните один раз BuildConfig. часть кода, вызывающую ошибку. В синем пузыре должно появиться справочное сообщение, например: «? uk.co.package.app.BuildConfig? Alt + ENTER». Нажмите на него, и Android Studio автоматически добавит недостающий импорт. или
  • добавьте import uk.co.package.app.BuildConfig; где-нибудь в списке импорта.

перестроить ... работает! ну, по крайней мере, для меня это сработало.

Надеюсь, что это поможет другому новичку в Gradle Android, как я!

person Litome    schedule 27.07.2015

Добавьте ниже в build.gradle (Модуль: Приложение) и Rebuild Project

android {
    buildFeatures {
        buildConfig = true
    }
}
person Ketan Ramani    schedule 14.02.2021

В моем случае проблема заключалась в том, что я только что переименовал модуль своего проекта, но ссылки на имена модулей не обновлялись автоматически в AndroidManifest.xml.

Переименование их вручную и перестройка проекта решили проблему.

person Renan Ferrari    schedule 07.04.2016
comment
Я провел некоторый рефакторинг и не изменил полностью все экземпляры; этот ответ указал мне правильное направление. Спасибо! - person Cezille07; 22.04.2019
comment
та же проблема. попробовал очистить проект. перезапуск студии Android. ничего не работало, ошибка все еще существовала. Затем я очистил его еще раз (Сборка ›Очистить проект), затем принудительно запустил отладку. после сборки все прошло успешно и ошибка исчезла. - person Chief; 28.05.2020

Найдите вхождения BuildConfig. У меня был мошеннический импорт несуществующих BuildConfig и компилятора, вместо того, чтобы улавливать это, указывающее на случайную строку кода где-то еще!

person RRK    schedule 31.10.2016

Используйте это для Android X

import androidx.multidex.BuildConfig;

это работа для меня.

person Saurabh Gaddelpalliwar    schedule 18.05.2020
comment
Отличная работа. Это решило проблему после перехода на androidX - person Adarsh Vijayan P; 16.03.2021

Мой пакет не обновлялся в моем манифесте. Я проверил файл AndroidManifest.xml и исправил имя своего пакета. Вот как я решил эту проблему.

person Jack'    schedule 20.08.2019

Мои 2 цента:

У меня был правильный import xxx.BuildConfig, AS будет указывать на эту строку и те строки, где у меня было BuildConfig.SOME_VARIABLE, поэтому я удалил строку import, перестроил ее, получил сообщение об ошибке BuildConfig is unrecognised reference blah blah, а после этого я импортировал ее и заново построил.

person Draško    schedule 30.10.2019

Я столкнулся с такой же ошибкой при сборке (отладке) старого проекта в студии Android. Когда я исследовал ошибку, я обнаружил, что класс BuildConfig определен в 2 файлах. 1-й был в BuildConfig.java, а 2-й - в BuildConfig2.java.

Я удалил один из файлов и работал правильно.

person Alok Kumar    schedule 25.12.2019
comment
Я удалил один из файлов BuildConfig.java, а затем успешно построил проект и начал отладку. - person Alok Kumar; 25.12.2019

В моем случае я сделал глупую ошибку, КОПИРОВАТЬ И ВСТАВИТЬ ОДИН ВАРИАНТ. Я просто переименовал другой вариант, и он сработал.

введите описание изображения здесь

person Rumit Patel    schedule 17.02.2020

Возможное решение: если вы используете библиотеку биллинга 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, чтобы было совершенно ясно, что вам нужна версия этого файла из вашего пакета, а не какая-либо другая.

Надеюсь это поможет!

person fattire    schedule 26.03.2020

Перестройте модуль, щелкнув его правой кнопкой мыши и выбрав Rebuild Module 'module name'

или используйте короткую клавишу: Ctrl + Shift + F9

person Ali Rezaiyan    schedule 07.11.2020

Если конфигурация сборки не разрешается в файле сборки Gradle, используйте приведенный ниже код и синхронизируйте его, он будет работать должным образом.

android{
buildFeatures{
    buildConfig = true
}}
person Nithin Raja    schedule 27.01.2021
comment
Здесь неправильный отступ. Этот ответ лучше: stackoverflow.com/a/66195950/191761 - person Adam Burley; 18.05.2021

Я перепробовал все здесь, и у меня ничего не получилось. Изначально у меня была проблема, заключающаяся в том, что один из методов BuildConfig, о котором я говорил, не обнаруживался, поэтому я попробовал некоторые из решений здесь. Это только еще больше разрушило мой проект (по крайней мере, я так думал). Я попытался изменить свой тип сборки и в итоге столкнулся с проблемой, упомянутой OP (которая была проблемой, которой у меня не было. Я пришел сюда в поисках решения другой проблемы, и в итоге создал проблему OP для себя facepalm ).

Итак, решение, которое исправило для меня, было просто перейти к

Сборка ›Сделайте модуль app.

И независимо от того, сколько у меня было красных отметок, он просто все исправил для меня. Я даже не смог импортировать BuildConfig моего проекта после того, как я сломал его, попробовав решения здесь, для проблемы, которой у меня не было (я тупой, да, я не понимаю, что я делаю). Я думаю, что чистая сборка еще больше сломала ситуацию. Но это все решило для меня.

Источник: https://tinaciousdesign.com/blog/buildconfig-debug-always-returns-false-android/

TL; DR: BuildConfig - это сгенерированный класс в вашем проекте. Если Android Studio не может его найти, вам будет предложено импортировать его. Не импортируйте его, иначе вы получите предупреждение о ворсинах. Запустите проект как обычно, не обращая внимания на красный цвет. Ваша проблема должна быть решена

person Max    schedule 24.03.2021

Я хотел бы добавить еще одно решение этой проблемы. Я пробовал все ответы на этот пост, но никто не упомянул о перезагрузке компьютера сразу после обновления системных переменных. Работает как шарм!

person Jim Ovejera    schedule 13.01.2021