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 = "";
}

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.


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 .


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.


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


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 :)


14

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

wprowadź opis obrazu tutaj


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


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!


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


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.


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.


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!


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.


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.


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.


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


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!



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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.