Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

gradle force build tools version on third party libraries?

how can I force a library to use sdk build tools 19.1.0 or above without forking/manually editing the build.gradle file for the library?

I keep getting this error when using libraries...

Error:The SDK Build Tools revision (.......) is too low for project ':somelibrary'. Minimum required is 19.1.0
like image 246
Mars Avatar asked Jun 30 '14 15:06

Mars


2 Answers

The lack easy way to do it is beyond my understanding. Tons of people use library projects that they don't own, have to build with Jenkins or have other reasons not to touch them and don't want to fork them for personal use.

Anyway, I found a solution here.

Will copy it here just in case:

In you root build.gradle add

ext {
    compileSdkVersion = 20
    buildToolsVersion = "20.0.0"
}
subprojects { subproject ->
    afterEvaluate{
        if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) {
            android {
                compileSdkVersion rootProject.ext.compileSdkVersion
                buildToolsVersion rootProject.ext.buildToolsVersion
            }
        }
    }
}

This will apply compileSdkVersion and buildToolsVersion to any android modules you have.

And in your main project's build.gradle change dependencies to this:

compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion

Basically you are defining them once and could use from anywhere.

Cheers.

like image 51
Sver Avatar answered Oct 15 '22 09:10

Sver


If you only want to update the compileSdkVersion and buildToolsVersion values only when the buildToolsVersion value is too low, you can first compare the version number of the subproject and only update if needed. This way you make minimal changes to other projects and have less projects to check if things go wrong.

So, let's say that Android Studio is telling you that you need a minimum build tools version of 25.0.0, then in your root build.gradle, here's how you would check each sub-project's buildToolsVersion and only change it if it's less than 25.0.0:

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android") && VersionNumber.parse(project.property("android").buildToolsVersion) < VersionNumber.parse("25.0.0")) {
            android {
                compileSdkVersion 25
                buildToolsVersion '25.0.0'
            }
        }
    }
}
like image 7
Ryan H. Avatar answered Oct 15 '22 08:10

Ryan H.