How to define common android properties for all modules using gradle

I create a simple project in AndroidStudio with a few modules. Each module's gradle script contains the following code:

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }
}

How can I move this code to the main build.gradle script (project's script)? This code is common for all the submodules.


Solution 1:

You could create a build.gradle at the root of your project (i.e. the folder that contains all your modules), and use it to configure your rootProject.

For instance, if you have:

MyApp
  - Module1/
      - build.gradle
  - Module2/
      - build.gradle
  - settings.gradle

You can add a build.gradle next to settings.gradle.

In the example above you actually have 3 Gradle projects: Module1, Module2 and the rootProject.

So inside this build.gradle, you could do:

// use the ext object to add any properties to the project
project.ext {
   compileSdkVersion = 18
}

Then in your modules, you can do:

android {
    // here we reference the root project with the "rootProject" object.
    compileSdkVersion rootProject.ext.compileSdkVersion
}

Solution 2:

Defining this in the top-most build.gradle seems to work

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                compileSdkVersion 22
                buildToolsVersion '22.0.1'
            }
        }
    }
}