Gradle buildConfigField BuildConfig kann das Symbol nicht auflösen

80

Ich verwende Gradle, um meine Android-Anwendung zu erstellen. Ich versuche, einige Flags basierend auf dem Build-Typ (Release oder Debug) zu verwenden.

Meine Gradle-Datei sieht folgendermaßen aus:

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

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

Und wenn ich versuche anzurufen BuildConfig.PREPRODoder den BuildConfig.STAGINGFehler "Symbol kann nicht aufgelöst werden" erhalte. Die Gradle-Synchronisierung war erfolgreich, daher weiß ich nicht, ob ich einige Schritte vergessen habe, um diese Funktion verwenden zu können.

Die generierte BuildConfig.javaDatei ist die folgende (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
quelle
Können Sie überprüfen, ob die richtige BuildConfig-Klasse erstellt wurde? Es würde sich inbuild/source/buildconfig/debug/...
Xavier Ducrohet
Ich habe das Generierte BuildConfig.javazu meiner Frage hinzugefügt .
Gaëtan
Welche Version des Plugins verwenden Sie? Mit 0.9.1 sehe ich das nicht (beide Booleschen Werte werden in der Klasse angezeigt).
Xavier Ducrohet
4
Sie sollten nicht synchronisieren müssen (obwohl Studio Sie dazu auffordert, weil es nicht weiß, ob Sie das Modell geändert haben), aber Sie müssen erstellen, da die BuildConfig-Klasse während des Builds basierend auf dem Inhalt des Modells generiert wird build.gradle-Datei.
Xavier Ducrohet
2
Hallo, ich verwalte zwei Geschmacksrichtungen in der Anwendung über Konfigurationseinstellungen und wie Sie versuche ich, eine Konfigurationsvariable zu erstellen, aber für unterschiedliche Geschmacksrichtungen. Ich habe es versucht, aber kein Update in flavour / BuildConfig.java gesehen und konnte deshalb auch in der Kompilierungszeit nicht auf Variablen zugreifen. Irgendein Vorschlag !
CoDe

Antworten:

83

Stellen Sie sicher, dass Ihre Datei die richtige BuildConfig- Klasse importiert . Wenn Sie über andere Projektbibliotheken oder Module verfügen, wird manchmal die falsche buildConfig importiert. Stellen Sie sicher, dass Ihr Import wie folgt aussieht : com.project.app.BuildConfig . Ich hatte das gleiche Problem und das Problem war: Ich hoffe, es kann jemandem helfen.

MRodrigues
quelle
2
Du hast meinen Tag gerettet ! Danke mein Herr !
Astyan
1
@Astyan froh, dass ich helfen konnte.
MRodrigues
Wie mache ich das mit Build Vairents, wenn sich die vollständige com.xx ändert?
Zapnologica
@Zapnologica Build-Varianten sollten keinen Einfluss darauf haben. Solange Sie Ihre Variablen für jede Variante in der Datei build.gradle definiert haben.
MRodrigues
5 Jahre später und ich schulde Ihnen einen großen Dank. In meinem Fall wurde algoliasearch.BuildConfig verwendet, ohne dass ich es importierte
Dustytrash
44

Ich habe den gleichen Fehler bekommen. Versuchen Sie , auf der rechten Seite von Speichern auf Synchronisieren zu klicken . Tun Sie dies nach der Gradle-Synchronisierung .

Brunodles
quelle
8
Wo ist die Synchronisierung?
Lucky_girl
24

Ist mir passiert, weil ich ein String-Feld nicht richtig deklariert habe.

Ich habe die flüchtenden Charaktere vergessen. Wechsel von:

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

zu

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

Problem gelöst.

Louis
quelle
Das war es für mich! Vielen Dank! Manchmal sind es wirklich diese verdammten kleinen Dinge :)
MacD
23

Änderungen an Gradle-Build-Dateien aktualisieren die Generierung der BuildConfig-Klasse nicht, selbst wenn Sie oben auf die gelbe Leiste "Jetzt synchronisieren" klicken. Bei einer vollständigen Bereinigung wird das Generieren dieser Datei erzwungen.

In Android Studio: Erstellen -> Projekt bereinigen

user465363
quelle
16

Stellen Sie sicher, dass Sie Ihren Parameter auch zur defaultConfig hinzufügen. Sie führen wahrscheinlich den Standard-BuildVarient aus, während Ihr Parameter in einer bestimmten buildVariant definiert ist.

Verwenden Sie in der Build-Gradle-Datei Folgendes:

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

Verwenden Sie dann im Code Folgendes:

String myParam= BuildConfig.myParameter;

Hoffe das hilft, MA :)

MoranAk
quelle
12

Sie müssen zuerst die gewünschte Build-Variante auswählen, um auf das buildConfigField zugreifen zu können

Geben Sie hier die Bildbeschreibung ein

Mohammad Alotol
quelle
Das hat mir geholfen. Ich hatte bereits eine Build-Variante ausgewählt, aber das Ändern verursachte eine Neuerstellung, die den Fehler verschwinden ließ.
LarsH
12

Das gleiche ist mir passiert, behoben, als dies im Projektstamm ausgeführt wurde:

./gradlew assembleDebug
svprdga
quelle
11

Wenn diese Art von Problem auftritt, bereinigen Sie einfach Ihr Projekt und erstellen Sie es neu.

Vielen Dank.

mehmoodnisar125
quelle
5

Das gleiche Problem macht mich seit über einer Woche verrückt. In meinem Fall fehlte ein einfacher Import. Ich habe danach gesucht, aber irgendwie nirgends in den Dokumenten, die ich finden konnte, wird erwähnt, dass Sie die BuildConfig-Klasse irgendwo importieren müssen! Und doch ist es logisch. Ich glaubte weiterhin, dass es automatisch sein könnte. Nun, das ist es nicht.

Versuchen Sie es also entweder:

  • Klicken Sie einmal auf den BuildConfig.Teil des Codes, der den Fehler verursacht. In einer blauen Blase sollte eine Hilfemeldung mit folgenden Worten angezeigt werden: " ? uk.co.package.app.BuildConfig? Alt + ENTER" Klicken Sie darauf und Android Studio fügt automatisch den fehlenden Import hinzu. oder
  • Fügen Sie import uk.co.package.app.BuildConfig;irgendwo in der Liste Ihrer Importe hinzu.

wieder aufbauen ... es funktioniert! Nun, es hat sowieso für mich getan.

Hoffe, das hilft einem anderen Android-Neuling wie mir!

Litome
quelle
4

Klicken Sie in Android Studio auf Erstellen und dann auf Projekt bereinigen. Klicken Sie nach dem Bereinigen auf Projekt neu erstellen. - Wenn Sie fertig sind, schließen Sie Ihr Projekt. - Öffnen Sie Ihr Projekt erneut und führen Sie es aus. Der Fehler sollte nicht erneut auftreten. Er wurde gelöscht.

tshele litabe
quelle
2

In meinem Fall bestand das Problem darin, dass ich gerade ein Modul meines Projekts umbenannt hatte, die Namensreferenzen dieses Moduls jedoch nicht automatisch aktualisiert wurden AndroidManifest.xml.

Das manuelle Umbenennen und Neuerstellen des Projekts löste das Problem.

Renan Ferrari
quelle
Ich hatte einige Umgestaltungen vorgenommen und nicht alle Instanzen vollständig geändert. Diese Antwort zeigte mir die richtige Richtung. Vielen Dank!
Cezille07
gleicher Fehler. versuchte das Projekt zu reinigen. Android Studion neu starten. nichts hat funktioniert der fehler war noch da. Dann habe ich es noch einmal gereinigt (Build> Clean Project) und dann das Debug mit Gewalt ausgeführt. Es war nach dem Build erfolgreich und der Fehler verschwand.
Chef
2

Suchen Sie nach Vorkommen von BuildConfig. Ich hatte einen betrügerischen Import von nicht vorhandenem BuildConfig und dem Compiler, anstatt das zu fangen, das auf eine zufällige Codezeile an einer anderen Stelle zeigte!

RRK
quelle
1

In meinem Fall in Android Studio:

  1. Erstellen -> Projekt bereinigen;

  2. Datei -> Caches ungültig machen / neu starten ...

  3. Erstellen -> Projekt neu erstellen

djzhao
quelle
0

Mein Paket war in meinem Manifest nicht aktuell. Ich habe die Datei AndroidManifest.xml überprüft und den Namen meines Pakets korrigiert. So habe ich dieses Problem gelöst.

Jack'
quelle
0

Meine 2 Cent:

Ich hatte eine korrekte import xxx.BuildConfigAS, die auf diese Zeile und auf die Zeilen zeigte, in denen ich sie hatte BuildConfig.SOME_VARIABLE. Also entfernte ich die importZeile, baute sie neu auf, bekam die Fehlermeldung, dass sie BuildConfig is unrecognised reference blah blahdanach importiert und erneut erstellt wurde.

Draško
quelle
0

Ich habe den gleichen Fehler beim Erstellen (Debuggen) des alten Projekts in Android Studio festgestellt. Als ich den Fehler untersuchte, stellte ich fest, dass die BuildConfig-Klasse in 2 Dateien definiert war. Der erste war in BuildConfig.java und der zweite war in BuildConfig2.java.

Ich habe die Datei entfernt und richtig gearbeitet.

Alok Kumar
quelle
Ich habe eine der Dateien BuildConfig.java entfernt und dann das Projekt erfolgreich erstellt und mit dem Debuggen begonnen.
Alok Kumar
0

In meinem Fall habe ich einen dummen Fehler gemacht, indem ich dieselbe Variante kopiert und eingefügt habe. Ich habe gerade die andere Variante umbenannt und es hat funktioniert.

Geben Sie hier die Bildbeschreibung ein

Rumit Patel
quelle
0

Mögliche Lösung: Wenn Sie die Android X-Abrechnungsbibliothek verwenden , fügen Sie Ihrer build.gradleDatei möglicherweise die folgende Zeile hinzu :

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

Beachten Sie, dass die Android-Abrechnungsbibliothek AUCH eine eigene BuildConfig Klasse enthält, die den Code-Editor von Android Studio verwirren kann. In diesem Fall wird möglicherweise die folgende importAnweisung automatisch zu einer Ihrer Klassen hinzugefügt :

import com.android.billingclient.BuildConfig;

Das ist nicht die, die du benutzen willst, oder? Diejenige, die Sie verwenden möchten (wenn Sie einen Debug-Build durchgeführt haben), ist möglicherweise hier:

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

Um dies zu beheben, entfernen Sie diese Importanweisungszeile und erstellen Sie sie neu, um festzustellen, ob sie rechts aufgelöst werden kann BuildConfig.java. Wenn dies nicht möglich ist, müssen Sie es möglicherweise explizit über ein benennenimport com.example.myapp.BuildConfig.java , um deutlich zu machen, dass Sie die Version dieser Datei aus Ihrem Paket und nicht aus einer anderen Version möchten.

Hoffe das hilft!

Fett
quelle
0

Verwenden Sie dies für Android X.

import androidx.multidex.BuildConfig;

Es ist Arbeit für mich.

Saurabh Gaddelpalliwar
quelle