此文版权属于作者所有,任何人、媒体或者网站转载、借用都必须征得作者本人同意!
文件 androidVersion.gradle
//---------------------------
// tools function
// see: http://www.egeek.me/2013/12/07/gradle-auto-detect-android-sdk-and-build-tools-versions/
import org.codehaus.groovy.runtime.StackTraceUtils
int[] sdksAvailable() {
def sdks = new ByteArrayOutputStream()
exec {
commandLine 'android', 'list'
standardOutput = sdks
}
sdks = sdks
// get the output
.toString()
// split to strings
.split('\n')
// leave only strings with API levels
.findAll { it ==~ /\s*API level:.*/ }
// extract the API levels
.collect { (it =~ /\s*API level:\s*(\d+).*/)[0][1].toInteger() }
// sort from highest to lowest
.sort( { a, b -> b <=> a } )
sdks
}
int highestSdkAvailable(int defaultSdk) {
try {
def sdks = sdksAvailable()
def highestSdk = sdks[0]
if (highestSdk != null) {
println "Using highest found SDK " + highestSdk
highestSdk
} else {
println "No installed SDKs found. Using default SDK " + defaultSdk
defaultSdk
}
} catch (any) {
//println "Exception while determining highest SDK. Using default SDK " + defaultSdk
//StackTraceUtils.sanitize(any).printStackTrace()
defaultSdk
}
}
String androidSDKDir() {
def androidExecPath = new ByteArrayOutputStream()
exec {
commandLine 'which', 'android'
standardOutput = androidExecPath
}
file(androidExecPath.toString().trim()).getParentFile().getParentFile()
}
String[] buildToolsAvailable() {
def buildToolsDir = new File(androidSDKDir(), "build-tools")
buildToolsDir.list().sort { a, b -> b <=> a }
}
String latestBuildToolsAvailable(String defaultBuildTools) {
try {
def buildToolsVersions = buildToolsAvailable()
def latestBuildTools = buildToolsVersions[0]
if (latestBuildTools != null) {
println "Using latest found build tools " + latestBuildTools
latestBuildTools
} else {
println "No installed build tools found. Using default build tools " +
defaultBuildTools
defaultBuildTools
}
} catch (any) {
//println "Exception while determining latest build tools. Using default build tools " + defaultBuildTools
//StackTraceUtils.sanitize(any).printStackTrace()
defaultBuildTools
}
}
ext {
androidVer = [:]
androidVer['highestSdkAvailable'] = highestSdkAvailable(19)
androidVer['latestBuildToolsAvailable'] = latestBuildToolsAvailable("23.0.3")
}
用法,build.gradle 那边:
apply from: '../tools/androidVersion.gradle'
android {
compileSdkVersion androidVer['highestSdkAvailable']
buildToolsVersion androidVer['latestBuildToolsAvailable']