Last active
November 4, 2017 03:03
-
-
Save beartung/82da34d9c9c3b2239e34 to your computer and use it in GitHub Desktop.
detect highest android sdk with gradle
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//from http://www.egeek.me/2013/12/07/gradle-auto-detect-android-sdk-and-build-tools-versions/ | |
import org.codehaus.groovy.runtime.StackTraceUtils | |
String androidSDKDir() { | |
def androidExecPath = new ByteArrayOutputStream() | |
try { | |
exec { | |
commandLine 'which', 'android' | |
standardOutput = androidExecPath | |
} | |
println "find android exec path: " + androidExecPath.toString() | |
file(androidExecPath.toString().trim()).getParentFile().getParentFile() | |
} catch (ExecException) { | |
exec { | |
commandLine 'grep', 'sdk.dir', 'local.properties' | |
standardOutput = androidExecPath | |
} | |
println "find android sdk with local.properties: " + androidExecPath.toString() | |
file(androidExecPath.toString().trim().split('=')[1]) | |
} | |
} | |
int[] sdksAvailable() { | |
def sdks = new ByteArrayOutputStream() | |
def androidSdkDir = androidSDKDir() | |
exec { | |
workingDir androidSdkDir + "/tools" | |
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:\s*(\d+).*/ } | |
// 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[] buildToolsAvailable() { | |
println "sdk dir: " + androidSDKDir() | |
def buildToolsDir = new File(androidSDKDir(), "build-tools") | |
buildToolsDir.list([accept:{d, f-> !f.contains("android") }] as FilenameFilter).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 | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment