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

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.


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 .


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.


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


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


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


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

11

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

Vielen Dank.


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!


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.


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.


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!


1

In meinem Fall in Android Studio:

  1. Erstellen -> Projekt bereinigen;

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

  3. Erstellen -> Projekt neu erstellen


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.


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.


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.


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


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!


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.