2016-07-22 8 views
6

Я хотел бы определить накопление конфигурации подал, где я могу использовать переменную, определенную в Gradle сценарий по себе:Gradle buildConfigField с целой переменной

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

Но это производит следующие ошибки:

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.

  • Я мог бы использовать кавычки, как:

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

    Но это приходит к ошибке компилятора в BuildConfig

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

    Так что сейчас я остаюсь с:

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

    и использовать его как:

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

    У кого-нибудь есть лучшее решение или я неправильно использую buildConfigField?

    (я также попытался с помощью круглых скобок в сочетании с любым из возможности выше.)

    ответ

    22

    Я нашел решение, так что, возможно, этот ответ поможет кому-то в будущем.

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

    И теперь в Java я могу получить DatabaseVersion переменную:

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

    Спасибо, ключ, чтобы определить переменную как тип 'String', но использовать 'Int' для buildConfigField. Это делает ненужным кастинг и синтаксический анализ. Это то, что я искал. – salcosand