gradle for android 自动找当前环境当前最高版本的 sdk 和 build tools

此文版权属于作者所有,任何人、媒体或者网站转载、借用都必须征得作者本人同意!

文件 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']




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值