Boost compilation time of your React Native or Android app with the latest build-tools

With the release of Gradle 3 and the great performance boost it comes with, it’s very tempting to update like so:

In your root build.gradle, update the Gradle plugin so that it uses Gradle 3+:

...
dependencies {
classpath 'com.android.tools.build:gradle:2.3.0'
...

Then, in your app/build.gradle, update the build tools to the latest (25), because it's mandatory to support Gradle 3+:

...
android {
compileSdkVersion 23
buildToolsVersion '25.0.2'
...

Optionaly, if you have set distributionUrl in your gradle/wrapper/gradle-wrapper.properties file, you may want to replace it with:

distributionUrl=https\://services.gradle.org/distributions/gradle-3.5-bin.zip

Sadly, you’ll very much likely encounter this sort of error: The SDK Build Tools revision (23.0.1) is too low for project ':react-native-vector-icons'. Minimum required is 25.0.0. That's because one of your dependency (here, react-native-vector-icons) uses an old build tools version.

The process of updating the dependency (make a PR, be reviewed, be merged, and be published) can take a long time. Fortunately, you can overwrite the build tools version of your dependencies. To do so, copy and paste in your root build.gradle:

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

And in your app/build.gradle, replace:

...
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
...

Congratulations, you can now enjoy Gradle 3 build against the latest version of Android build-tools, thus boosting your compilation time. For example, in one of our React Native application, it now takes only 10 seconds when no changes were made!