2016-07-22 11 views
6

Ich mag würde ein Build-Config abgelegt definieren, wo ich eine Variable definiert im gradle Skript es selbst verwenden kann:Gradle buildConfigField mit Integer-Variable

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

Aber die erzeugt folgende Fehlermeldung:

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.

  • konnte ich Zitate wie:

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

    Aber dies kommt zu einem Compiler-Fehler in BuildConfig

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

    So jetzt ich mit bleiben:

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

    und verwenden Sie es mögen:

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

    Hat jemand bessere Lösung oder verwende ich buildConfigField falsch?

    (ich habe auch versucht, über Klammern in Kombination mit einem der Möglichkeit verwenden.)

    Antwort

    22

    ich eine Lösung gefunden, so vielleicht diese Antwort jemanden in Zukunft helfen wird.

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

    Und jetzt in Java kann ich Database Variable erhalten:

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

    Dank, der Schlüssel ist, um die Variable als Typ 'String' zu definieren, sondern 'int' für buildConfigField verwenden. Das macht Casting und Parsing überflüssig. Das habe ich gesucht. – salcosand

    Verwandte Themen