我的build.gradle文件中有這樣一行:如何在build.gradle文件中引用Build.VERSION_CODES?
targetSdkVersion 26
我寧願它是這樣的:
targetSdkVersion Build.VERSION_CODES.o
這可能嗎?它看起來更清潔/更安全,但是這種語法不起作用。
我的build.gradle文件中有這樣一行:如何在build.gradle文件中引用Build.VERSION_CODES?
targetSdkVersion 26
我寧願它是這樣的:
targetSdkVersion Build.VERSION_CODES.o
這可能嗎?它看起來更清潔/更安全,但是這種語法不起作用。
這可能嗎?
不,對不起。 Build
是一個存在於Android框架中的Java類。它不適用於Gradle。
我以爲你可以參考它'android.Build.etc。'? – Bungles
@Bungles:在Android應用中,是的。在Gradle腳本中,不,AFAIK。 – CommonsWare
這需要將Android SDK添加到buildscript classpath中,坦率地說沒有意義。爲了向後兼容,該值永遠不會改變,所以使用'26'完全有效。 –
目標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中,只要使用雙引號,就可以在字符串中使用變量。
謝謝!是的,這與我們所做的相似。我只是想知道是否有辦法通過利用平臺已經定義的價值來改進它。 – Bungles
'Build.VERSION_CODES.O'是一個靜態final int,所以無論你用什麼來實際編譯爲'26'。大家都知道O是26. 26寫得更短。爲什麼你更喜歡更短,尤其是如果他們都是常量而不是變量? ///如果你定義了'ext.myTargetSdkVersion = 26'並決定稍後升級,那就很好了。但我目前看不出任何意義。 –
目標SDK版本出現在必須同步的多個項目中(對於我們而言),否則lint將會出錯。再加上'compileSdkVersion'也必須符合相同的原因。在一個地方爲所有使用情況定義它將是很好的。定義一個常量比在多個地方引用一個文字更好的編程習慣。更好的是使用框架/ sdk已經定義的常量。 – Bungles
反對票?爲了什麼? – Bungles