2016-07-22 5 views
6

entier je voudrais définir une configuration de construction déposée où je peux utiliser une variable définie dans le script gradle elle-même:Gradle buildConfigField avec la variable

def someVar = 512 
android { 
... 
    buildConfigField 'int', 'SOME_INT_FIELD', someVar 
} 

Mais cela produit l'erreur suivante:

Error:(25, 0) Gradle DSL method not found: 'buildConfigField()'

Possible causes:

  • The project 'PROJECT' may be using a version of Gradle that does not contain the method.
  • The build file may be missing a Gradle plugin.

  • Je pourrais utiliser des citations comme:

    def someVar = 0 
    android { 
    ... 
        buildConfigField 'int', 'SOME_INT_FIELD', '"' + someVar + '"' 
    } 
    

    Mais cela vient d'une erreur du compilateur dans buildconfig

    // Fields from default config. 
    public static final int SOME_INT_FILED = "512"; 
    

    Donc pour l'instant je reste avec:

    def someVar = 0 
    android { 
    ... 
        buildConfigField 'String', 'SOME_INT_FIELD', '"' + someVar + '"' 
    } 
    

    et l'utiliser comme:

    final int value = Integer.valueOf(BuildConfig.SOME_INT_FIELD); 
    

    Est-ce que quelqu'un a une meilleure solution ou est-ce que j'utilise buildConfigField?

    (j'ai aussi essayé d'utiliser entre parenthèses en combinaison avec l'une des possibilités ci-dessus.)

    Répondre

    22

    J'ai trouvé une solution, peut-être cette réponse va aider quelqu'un à l'avenir.

    def String globalVersionCode 
    
    defaultConfig { 
        applicationId "com.test.gradle.build" 
        minSdkVersion 15 
        targetSdkVersion 22 
        versionCode 1 
        versionName "0.1" 
    
        globalVersionCode = versionCode 
    } 
    
    buildTypes { 
        release { 
         buildConfigField ("int", "DatabaseVersion", globalVersionCode) 
        } 
    } 
    

    Et maintenant en java je peux obtenir la variable DatabaseVersion:

    public static final int DB_VERSION = BuildConfig.DatabaseVersion; 
    
    +2

    Merci, la clé est de définir la variable comme type de 'String', mais utiliser 'int' pour buildConfigField. Cela rend tout casting et analyse inutile. C'est ce que je cherchais. – salcosand