web-dev-qa-db-fra.com

Gradle buildConfigField BuildConfig ne peut pas résoudre le symbole

J'utilise Gradle pour construire mon application Android. J'essaie d'utiliser des indicateurs en fonction du type de construction (release ou debug).

Mon fichier Gradle ressemble à ceci:

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

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

Et si j'essaie d'appeler BuildConfig.PREPROD Ou BuildConfig.STAGING, Le message d'erreur "Impossible de résoudre le symbole" s'affiche. La synchronisation de Gradle a été réussie, donc je ne sais pas si j'ai oublié des étapes pour pouvoir utiliser cette fonctionnalité?

Le fichier BuildConfig.Java Généré est le suivant (dans 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 = "";
}
65
Gaëtan

Assurez-vous que votre fichier importe la bonne classe BuildConfig. Parfois, si vous avez d'autres bibliothèques ou modules de projet, il se peut que le buildConfig incorrect soit importé. Assurez-vous que votre importation ressemble à ceci com.project.app.BuildConfig. J'avais le même problème et le problème était celui-ci, j'espère que cela pourra aider quelqu'un.

64
MRodrigues

Je devenais le même bug. Essayez de cliquer sur synchroniser, à droite de enregistrer. Faites cela après gradle sync.

40
brunodles

Cela m'est arrivé parce que je n'avais pas déclaré correctement un champ String.

J'ai oublié les personnages qui s'échappent. Changer de:

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

à

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

résolu le problème.

17
Louis

Assurez-vous d’ajouter votre paramètre également à defaultConfig. Vous exécutez probablement le buildVarient par défaut alors que votre paramètre est défini dans un buildVariant spécifique.

dans le fichier de construction, utilisez ceci:

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

Ensuite, dans le code, utilisez ceci:

String myParam= BuildConfig.myParameter;

J'espère que ça aide, M.A :)

13
MoranAk

Les modifications apportées aux fichiers de construction Gradle n'actualisent pas la génération de la classe BuildConfig, même si vous cliquez sur la barre jaune "Sync Now" en haut. Un nettoyage complet obligera à générer ce fichier.

Dans Android Studio: Construire -> Nettoyer le projet

7
user465363

Ce même problème me rend fou depuis plus d'une semaine. Dans mon cas, c'était une simple importation manquante. Je l'ai cherché, mais je ne trouve nulle part dans la documentation que vous ayez besoin d'importer la classe BuildConfig n'importe où! Et pourtant, c'est logique. J'ai continué à croire que cela pourrait être automatique. Eh bien, ce n'est pas le cas.

Alors essayez soit:

  • cliquez une fois sur le BuildConfig. partie du code à l'origine de l'erreur. Un message d’aide devrait apparaître dans une bulle bleue et indiquer quelque chose comme: "? uk.co.package.app.BuildConfig? Alt + ENTER "Cliquez dessus et Android studio ajoute automatiquement l’importation manquante. Ou
  • ajouter import uk.co.package.app.BuildConfig; quelque part dans la liste de vos importations.

reconstruire ... ça marche! eh bien, ça l’a fait de toute façon.

J'espère que cela aidera un autre diplômé Android newbie comme moi!

5
Litome

Vous devez d'abord choisir la variante de construction souhaitée pour pouvoir accéder à son buildConfigField

enter image description here

4
Mohammad Alotol

Rechercher des occurrences de BuildConfig. J'ai eu une importation non fiable de BuildConfig et du compilateur inexistants au lieu de le capturer ailleurs que sur une ligne de code aléatoire!

2
RRK

Dans mon cas, le problème était que je venais de renommer un module de mon projet, mais les références de nom de ce module n'étaient pas automatiquement mises à jour sur le AndroidManifest.xml.

Les renommer manuellement et reconstruire le projet ont résolu le problème.

1
Renan Ferrari

Mon colis n'était pas à jour dans mon manifeste. J'ai vérifié le fichier AndroidManifest.xml et corrigé le nom de mon paquet. Voici comment j'ai résolu ce problème.

0
Jack'