2017-08-01 182 views
-2

我的build.gradle文件中有這樣一行:如何在build.gradle文件中引用Build.VERSION_CODES?

targetSdkVersion 26 

我寧願它是這樣的:

targetSdkVersion Build.VERSION_CODES.o 

這可能嗎?它看起來更清潔/更安全,但是這種語法不起作用。

+1

'Build.VERSION_CODES.O'是一個靜態final int,所以無論你用什麼來實際編譯爲'26'。大家都知道O是26. 26寫得更短。爲什麼你更喜歡更短,尤其是如果他們都是常量而不是變量? ///如果你定義了'ext.myTargetSdkVersion = 26'並決定稍後升級,那就很好了。但我目前看不出任何意義。 –

+0

目標SDK版本出現在必須同步的多個項目中(對於我們而言),否則lint將會出錯。再加上'compileSdkVersion'也必須符合相同的原因。在一個地方爲所有使用情況定義它將是很好的。定義一個常量比在多個地方引用一個文字更好的編程習慣。更好的是使用框架/ sdk已經定義的常量。 – Bungles

+0

反對票?爲了什麼? – Bungles

回答

1

這可能嗎?

不,對不起。 Build是一個存在於Android框架中的Java類。它不適用於Gradle。

+0

我以爲你可以參考它'android.Build.etc。'? – Bungles

+0

@Bungles:在Android應用中,是的。在Gradle腳本中,不,AFAIK。 – CommonsWare

+0

這需要將Android SDK添加到buildscript classpath中,坦率地說沒有意義。爲了向後兼容,該值永遠不會改變,所以使用'26'完全有效。 –

2

目標SDK版本將出現在多個項目[...]這將是很好的一個地方,這個定義對所有使用實例

所以我們在談論定義項目範圍的訪問建立時間值。

將這個在您的根項目build.gradle

ext { 
    compileSdkVersion = 26 
    buildToolsVersion = "26.0.0" 
    minSdkVersion = 17 
    targetSdkVersion = 26 

    supportLibVersion = "26.0.0" 
    playServicesVersion = "10.2.6" 
} 

現在你可以像這樣你的模塊build.gradle在參考這些數值:

android { 
    compileSdkVersion rootProject.ext.compileSdkVersion 
    buildToolsVersion rootProject.ext.buildToolsVersion 

    defaultConfig { 
     minSdkVersion rootProject.ext.minSdkVersion 
     targetSdkVersion rootProject.ext.targetSdkVersion 
     // ... 
    } 

    // ... 
} 

dependencies { 
    compile "com.android.support:design:$supportLibVersion" 
    compile "com.google.firebase:firebase-messaging:$playServicesVersion" 
    // ... 
} 

// ... 

我想你甚至可以省略前綴rootProject.ext.只要結果名稱不與DSL成員名稱衝突。

在Groovy中,只要使用雙引號,就可以在字符串中使用變量。

+0

謝謝!是的,這與我們所做的相似。我只是想知道是否有辦法通過利用平臺已經定義的價值來改進它。 – Bungles

相關問題