Gradle buildConfigField BuildConfig nie może rozpoznać symbolu

84

Używam Gradle do tworzenia mojej aplikacji na Androida. Próbuję użyć niektórych flag w oparciu o typ kompilacji (wydanie lub debugowanie).

Mój plik Gradle wygląda następująco:

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

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

A jeśli spróbuję zadzwonić BuildConfig.PREPRODlub BuildConfig.STAGINGotrzymam błąd „Nie można rozwiązać symbolu”. Synchronizacja Gradle powiodła się, więc nie wiem, czy zapomniałem niektórych kroków, aby móc korzystać z tej funkcji?

Wygenerowany BuildConfig.javaplik jest następujący (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 = "";
}
Gaëtan
źródło
Czy możesz sprawdzić, czy została utworzona właściwa klasa BuildConfig. Będzie się znajdować wbuild/source/buildconfig/debug/...
Xavier Ducrohet
Dodałem wygenerowane BuildConfig.javado mojego pytania.
Gaëtan
Jakiej wersji wtyczki używasz? W wersji 0.9.1 nie widzę tego (oba logiczne pojawiają się w klasie).
Xavier Ducrohet
4
Nie powinieneś być zmuszony do synchronizacji (chociaż Studio poprosi Cię o zrobienie tego, ponieważ nie wie, czy zmieniłeś model), ale będziesz musiał budować, ponieważ klasa BuildConfig jest generowana podczas kompilacji na podstawie tego, co jest w build.gradle.
Xavier Ducrohet
2
Cześć, zarządzam dwoma smakami w aplikacji poprzez ustawienia konfiguracyjne i tak jak ty próbuję stworzyć jakąś zmienną konfiguracyjną, ale dla innego smaku. Próbowałem, ale nie widziałem żadnej aktualizacji w flavour / BuildConfig.java iz tego powodu nie mogłem uzyskać dostępu do zmiennej nawet w czasie kompilacji. Jakieś sugestie !
CoDe

Odpowiedzi:

85

Upewnij się, że plik importuje odpowiednią klasę BuildConfig . Czasami, jeśli masz inne biblioteki lub moduły projektu, może zaimportować nieprawidłową konfigurację buildConfig. Upewnij się, że import wygląda tak, jak ten com.project.app.BuildConfig . Miałem ten sam problem, a problem polegał na tym, mam nadzieję, że może to komuś pomóc.

MRodrigues
źródło
2
Uratowałeś mi dzień! Dziękuję Panu !
Astyan
1
@Astyan cieszę się, że mogłem pomóc.
MRodrigues,
jak to zrobić z wartościami kompilacji po zmianie pełnego com.xx?
Zapnologica
Warianty kompilacji @Zapnologica nie powinny mieć na to wpływu. O ile masz zdefiniowane zmienne dla każdego wariantu, w pliku build.gradle.
MRodrigues
5 lat później jestem ci winien wielkie dzięki. W moim przypadku korzystał z algoliasearch.BuildConfig bez mojego importu
dustytrash
45

Dostałem ten sam błąd. Spróbuj kliknąć synchronizuj po prawej stronie zapisu . Zrób to po synchronizacji Gradle .

brunodles
źródło
8
Gdzie jest synchronizacja?
Lucky_girl
26

Zdarzyło mi się, ponieważ nie zadeklarowałem poprawnie pola typu String.

Zapomniałem o uciekających postaciach. Zmiana z:

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

do

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

Rozwiązać problem.

Louis
źródło
To było to dla mnie! Dzięki! Czasami to naprawdę te cholerne małe rzeczy :)
MacD
24

Zmiany w plikach kompilacji Gradle nie odświeżają generacji klasy BuildConfig, nawet jeśli klikniesz żółty pasek „Synchronizuj teraz” u góry. Pełne czyszczenie wymusi wygenerowanie tego pliku.

W Android Studio: Kompiluj -> Wyczyść projekt

user465363
źródło
16

Upewnij się, że dodajesz swój parametr również do pliku defaultConfig. Prawdopodobnie korzystasz z domyślnego buildVarient, podczas gdy parametr jest zdefiniowany w określonym buildVariant.

w pliku gradle kompilacji użyj tego:

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

Następnie w kodzie użyj tego:

String myParam= BuildConfig.myParameter;

Mam nadzieję, że to pomoże, MA :)

MoranAk
źródło
14

Musisz najpierw wybrać żądany wariant kompilacji, aby mieć dostęp do jego buildConfigField

wprowadź opis obrazu tutaj

Mohammad Alotol
źródło
To mi pomogło. Miałem już wybrany wariant kompilacji, ale jego zmiana spowodowała przebudowę, w wyniku której błąd zniknął.
LarsH
14

To samo stało się ze mną, naprawione podczas uruchamiania tego w katalogu głównym projektu:

./gradlew assembleDebug
svprdga
źródło
11

jeśli tego typu problem wystąpi, po prostu wyczyść i przebuduj projekt.

dzięki.

mehmoodnisar125
źródło
5

Ten sam problem doprowadza mnie do szału od ponad tygodnia. W moim przypadku brakowało prostego importu. Szukałem tego, ale jakoś nigdzie w dokumentach, które mogłem znaleźć, nie wspomina, że ​​musisz gdziekolwiek zaimportować klasę BuildConfig! A jednak jest to logiczne. Ciągle wierzyłem, że to może być automatyczne. Cóż, to NIE JEST.

Więc spróbuj:

  • kliknij raz BuildConfig.część kodu, która powoduje błąd. W niebieskim dymku powinien pojawić się komunikat pomocy o treści w stylu: „ ? uk.co.package.app.BuildConfig? Alt + ENTER” Kliknij go, a Android Studio automatycznie doda brakujący import. lub
  • dodaj import uk.co.package.app.BuildConfig;gdzieś na liście swoich importów.

odbudować ... to działa! cóż, i tak mi się udało.

Mam nadzieję, że pomoże to innemu nowicjuszowi z Androidem, takim jak ja!

Litome
źródło
5

W moim przypadku w Android Studio:

  1. Kompiluj -> Wyczyść projekt;

  2. Plik -> Unieważnij pamięci podręczne / Uruchom ponownie ...

  3. Build -> Rebuild Project

djzhao
źródło
4

W Android Studio - kliknij Build, a następnie Clean Project - Po wyczyszczeniu kliknij Rebuild Project. - Po zakończeniu zamknij projekt. - Otwórz projekt ponownie i uruchom go, błąd nie powinien się ponownie pojawić, został usunięty.

tshele litabe
źródło
2

W moim przypadku problem polegał na tym, że właśnie zmieniłem nazwę modułu mojego projektu, ale odwołania do nazwy tego modułu nie zostały automatycznie zaktualizowane w AndroidManifest.xml.

Ręczna zmiana ich nazw i przebudowa projektu rozwiązała problem.

Renan Ferrari
źródło
Zrobiłem kilka refaktoryzacji i nie zmieniłem całkowicie wszystkich instancji; ta odpowiedź wskazała mi właściwy kierunek. Dzięki!
Cezille 07
ten sam problem. próbował wyczyścić projekt. ponowne uruchamianie Android Studion. nic nie działało, błąd nadal występował. Następnie wyczyściłem go jeszcze raz (Build> Clean Project), a następnie uruchomiłem debugowanie na siłę. powiodło się po kompilacji i błąd zniknął.
Szef
2

Wyszukaj wystąpienia BuildConfig. Miałem nieuczciwy import nieistniejącego BuildConfig i kompilatora zamiast przechwytywania tego, który wskazywał na losową linię kodu w innym miejscu!

RRK
źródło
0

Mój manifest nie był aktualny. Sprawdziłem plik AndroidManifest.xml i poprawiłem nazwę mojego pakietu. W ten sposób rozwiązałem ten problem.

Jacek'
źródło
0

Moje 2 centy:

Miałem poprawną import xxx.BuildConfig, AS wskazywał na tę linię i na te, które miałem BuildConfig.SOME_VARIABLE, więc usunąłem importlinię, odbudowałem ją, pojawił się błąd z informacją o tym, BuildConfig is unrecognised reference blah blaha następnie zaimportowałem ją i odbudowałem ponownie.

Draško
źródło
0

Napotkałem ten sam błąd podczas budowania (debugowania) starego projektu w Android Studio. Kiedy zbadałem błąd, odkryłem, że klasa BuildConfig została zdefiniowana w 2 plikach. Pierwszy był w BuildConfig.java, a drugi w BuildConfig2.java.

Usunąłem ten z pliku i działałem poprawnie.

Alok Kumar
źródło
Usunąłem jeden z plików BuildConfig.java, a następnie pomyślnie zbudowałem projekt i rozpocząłem debugowanie.
Alok Kumar
0

W moim przypadku popełniłem głupi błąd KOPIOWANIE I WKLEJANIE TEGO SAMEGO WARIANTU. Właśnie zmieniłem nazwę drugiego wariantu i zadziałało.

wprowadź opis obrazu tutaj

Rumit Patel
źródło
0

Możliwe rozwiązanie: jeśli korzystasz z biblioteki rozliczeń systemu Android X , na przykład przez dodanie następującego wiersza w build.gradlepliku:

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

Należy pamiętać, że biblioteka rozliczeń systemu Android RÓWNIEŻ zawiera własną BuildConfig klasę, co może zmylić edytor kodu Android Studio. W takim przypadku może automatycznie dodać następującą importinstrukcję do jednej z Twoich klas:

import com.android.billingclient.BuildConfig;

To nie jest ten, którego chcesz użyć, prawda? Ten, którego chcesz używać (jeśli robiłeś kompilację debugowania), może być tutaj:

./build/generated/source/buildConfig/debug/com/example/myapp/BuildConfig.java

Aby to naprawić, usuń wiersz instrukcji importu i przebuduj, aby sprawdzić, czy można go rozwiązać w prawo BuildConfig.java. Jeśli tak się nie stanie, być może będziesz musiał jawnie nazwać go za pomocą an, import com.example.myapp.BuildConfig.javaaby było bardzo jasne, że chcesz mieć wersję tego pliku z pakietu, a nie inną.

Mam nadzieję że to pomoże!

gruźć
źródło
0

Użyj tego dla Androida X

import androidx.multidex.BuildConfig;

to dla mnie praca.

Saurabh Gaddelpalliwar
źródło
0

Odbuduj swój moduł, klikając prawym przyciskiem myszy moduł i wybierz plik Rebuild Module 'module name'

lub użyj skrótu: Ctrl+ Shift+F9

Ali Rezaiyan
źródło