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


84

Я використовую 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 = "";
}

Чи можете ви перевірити, чи був створений відповідний клас BuildConfig. Він знаходився б уbuild/source/buildconfig/debug/...
Ксав'є Дюкрохет

Я додав сформоване BuildConfig.javaдо свого запитання.
Gaëtan

Яку версію плагіна ви використовуєте? З 0.9.1 я цього не бачу (обидва логічні значення відображаються в класі).
Ксав'є Дюкрохет

4
Вам не доведеться синхронізувати (хоча Studio попросить вас це зробити, оскільки не знає, чи змінили ви модель), але вам потрібно буде побудувати, оскільки клас BuildConfig генерується під час збірки на основі вмісту файл build.gradle.
Xavier Ducrohet

2
Привіт, я керую двома смаковими якостями в додатку за допомогою налаштувань конфігурації, і, як і ти, я намагаюся створити деяку змінну конфігурації, але для іншого смаку. Я спробував ваш шлях, але не побачив жодного оновлення у flavor / BuildConfig.java, і через це я не міг отримати доступ до змінної навіть під час компіляції. Будь-яка пропозиція!
CoDe

Відповіді:


85

Переконайтеся, що ваш файл імпортує правильний клас BuildConfig . Іноді, якщо у вас є інші бібліотеки проектів або модулі, це може імпортувати неправильний buildConfig. Переконайтеся, що ваш імпорт схожий на цей com.project.app.BuildConfig . У мене була та сама проблема, і проблема полягала в цьому, сподіваюся, це може комусь допомогти.


2
Ти врятував мій день! Дякую вам сер !
Астян

1
@Astyan радий, що я міг допомогти.
MRodrigues

як мені це зробити за допомогою vairents build, коли змінюється повний com.xx?
Zapnologica,

Варіанти збірки @Zapnologica не повинні впливати на це. Поки у вас є змінні, визначені для кожного варіанту, у файлі build.gradle.
MRodrigues

Через 5 років я висловлюю вам велику подяку. У моєму випадку він використовував algoliasearch.BuildConfig без того, щоб я навіть імпортував його
dustytrash

45

Я отримував ту ж помилку. Спробуйте натиснути на синхронізувати , з правого боку збереження . Зробіть це після градації синхронізації .


8
Де синхронізація?
Lucky_girl 02

26

Це сталося зі мною, оскільки я не оголосив поле String належним чином.

Я забув втікаючих персонажів. Перехід від:

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

до

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

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


Це було для мене! Дякую! Іноді це справді ті прокляті дрібниці :)
MacD

24

Зміни у файлах збірки gradle не оновлюють генерацію класу BuildConfig, навіть якщо клацнути жовту панель "синхронізувати зараз" у верхній частині. Повне очищення змусить генерувати цей файл.

В Android Studio: Build -> Clean Project


16

Обов’язково додайте свій параметр також до defaultConfig. Ви, напевно, запускаєте buildVarient за замовчуванням, тоді як ваш параметр визначений у специфічному buildVariant.

у файлі build gradle використовуйте це:

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

Потім у коді використовуйте це:

String myParam= BuildConfig.myParameter;

Сподіваюся, це допомагає, магістратура :)


14

Спочатку потрібно вибрати бажаний варіант збірки, щоб мати доступ до його buildConfigField

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


Це мені допомогло. Я вже вибрав варіант збірки, але його зміна призвела до відновлення, яке призвело до помилки.
LarsH 03.03.20

14

Те ж саме трапилося зі мною, виправлено при запуску цього в корені проекту:

./gradlew assembleDebug

11

якщо такий тип проблем трапляється, просто очистіть і відновіть свій проект.

Дякую.


5

Ця сама проблема зводить мене з розуму вже більше тижня. У моєму випадку це було відсутнє просте імпортування. Я шукав його, але якось ніде в документах, які я міг знайти, не згадується, що вам потрібно імпортувати клас BuildConfig куди завгодно! І все-таки це логічно. Я продовжував вважати, що це може бути автоматично. Ну, це НЕ.

Тож спробуйте:

  • клацніть один раз на BuildConfig.частині коду, яка спричиняє помилку. У блакитному міхурі повинно з'явитися довідкове повідомлення із написом " ? uk.co.package.app.BuildConfig? Alt + ENTER" Клацніть на нього, і Android Studio автоматично додасть відсутні імпорт. або
  • додати import uk.co.package.app.BuildConfig;десь у списку вашого імпорту.

відновити ... це працює! ну, це все одно зробило для мене.

Сподіваюся, що це допоможе іншому новачкові, як я, Gradle android!


5

У моєму випадку в Android Studio:

  1. Збірка -> Чистий проект;

  2. Файл -> Недійсні кеші / перезапуск ...

  3. Збірка -> Відновити проект


4

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


2

У моєму випадку проблема полягала в тому, що я щойно перейменував модуль свого проекту, але посилання на ці модулі не були автоматично оновлені на AndroidManifest.xml .

Проблема вирішена вручну, перейменувавши їх та відновивши проект.


Я зробив деякий рефакторинг і не повністю змінив усі інстанції; ця відповідь вказувала мені в правильному напрямку. Дякую!
Cezille07,

те саме питання. спробував очистити проект. перезапуск android studion. нічого не вийшло, помилка все ще була. Потім я ще раз очистив його (Build> Clean Project), після чого запустив налагодження силою. він був успішним після збірки, і помилка зникла.
Начальник

2

Пошук випадків BuildConfig. У мене був неправдивий імпорт неіснуючого BuildConfig та компілятора, замість того, щоб ловити те, що вказувало на випадковий рядок коду десь ще!


0

Мій пакет не був оновлений у моєму маніфесті. Я перевірив файл AndroidManifest.xml і виправив назву свого пакета. Ось як я вирішив цю проблему.


0

Мої 2 центи:

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


0

Я зіткнувся з такою ж помилкою під час збірки (налагодження) старого проекту в студії Android. Коли я дослідив помилку, я виявив, що клас BuildConfig був визначений у 2 файлах. Перший був у BuildConfig.java, а другий - у BuildConfig2.java.

Я видалив файл із файлу і працював правильно.


Я видалив один файл BuildConfig.java, а потім успішно побудував проект і розпочав налагодження.
Alok Kumar

0

У моєму випадку я припустився дурної помилки, КОПІЮВАЛИ І ВСТАЛИВ ТАКЖУ ВАРІАНТУ. Я просто перейменував інший варіант, і він спрацював.

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


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

Відновіть свій модуль, клацнувши правою кнопкою миші на його модулі та виберіть Rebuild Module 'module name'

або скористайтеся короткою клавішею: Ctrl+ Shift+F9

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.