gradle for android 自动找当前环境当前最高版本的 sdk 和 build tools
16lz
2021-01-25
此文版权属于作者所有,任何人、媒体或者网站转载、借用都必须征得作者本人同意!
文件 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.StackTraceUtilsint[] 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']
更多相关文章
- Flutter开发中问题汇总贴(持续更新中)
- Android国内一些比较知名的大牛
- S5PV210 Android(安卓)DM9000驱动
- android studio3.0 NDK编译Error: cannot use ‘throw’ with ex
- 在Android(安卓)NDK下打印log
- Android(安卓)中 View 炸裂特效的实现分析 《IT蓝豹》
- 第八章 Libgdx输入处理(1)
- Android中invalidate()和postInvalidate() 的区别
- Android(安卓)Studio编译输出apk文件修改文件名