2016-07-22 110 views
6

我想定義一個構建配置申請,我可以用在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

    謝謝,關鍵是要定義變量類型「字符串」的,而是用「詮釋」的buildConfigField。這使得任何轉換和解析都不必要。這就是我一直在尋找的。 – salcosand