2016-07-22 18 views
6

Tôi muốn xác định một xây dựng cấu hình nộp nơi tôi có thể sử dụng một biến được định nghĩa trong kịch bản gradle nó tự:Gradle buildConfigField với số nguyên biến

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

Nhưng điều này tạo ra lỗi sau:

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.

  • tôi có thể sử dụng dấu ngoặc kép như:

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

    Nhưng điều này nói đến một lỗi biên dịch trong BuildConfig

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

    Vì vậy, bây giờ tôi ở lại với:

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

    và sử dụng nó như:

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

    Có ai có giải pháp tốt hơn hay tôi sử dụng buildConfigField sai?

    (Tôi cũng đã cố gắng sử dụng dấu ngoặc trong sự kết hợp với bất kỳ khả năng trên.)

    Trả lời

    22

    Tôi tìm thấy một giải pháp, như vậy có lẽ câu trả lời này sẽ giúp ai đó trong tương lai.

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

    Và bây giờ trong java Tôi có thể lấy DatabaseVersion biến:

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

    Cảm ơn, chính là để xác định các biến như loại 'String', nhưng sử dụng 'int' cho buildConfigField. Điều đó khiến cho việc truyền và phân tích cú pháp không cần thiết. Đó là những gì tôi đang tìm kiếm. – salcosand

    Các vấn đề liên quan