Gradle and Multi-Project structure Gradle and Multi-Project structure android android

Gradle and Multi-Project structure


Most of this is pretty normal to the http://www.gradle.org/docs/current/userguide/multi_project_builds.html page. However you are going to need to add

evaluationDependsOn(':project1')evaluationDependsOn(':project2')

so that gradle will evaluate project1 and project2 before module. In all the projects that contain code you will need to have an empty build.gradle file. This will also allow you to customize a project if needed.

Example: https://github.com/ethankhall/AndroidComplexBuild

Add a build.gradle at the root of your projects. So you need 4 that have useful information in it.

/build.gradle/settings.gradle/project1/build.gradle/project2/build.gradle/module/build.gradle

in /build.gradle put

dependencies {    project(":module")}

in /settings.gradle put

include ':module'include ':project1', ':project1:A1', ':project1:B1', ':project1:Z1'include ':project2', ':project2:A2', ':project2:B2', ':project2:Z2'

in /project1/build.gradle put

apply plugin: 'java'subprojects {    apply plugin: 'java'    sourceCompatibility = JavaVersion.VERSION_1_6    targetCompatibility = JavaVersion.VERSION_1_6    repositories{        mavenCentral()    }       //Anything else you would need here that would be shared across all subprojects}

/project2/build.gradle

buildscript {    repositories {        mavenCentral()    }       dependencies {        classpath 'com.android.tools.build:gradle:0.4.2'    }   }subprojects {    apply plugin: 'android-library'    android {        compileSdkVersion 17        buildToolsVersion "17.0"    }       sourceCompatibility = JavaVersion.VERSION_1_6    targetCompatibility = JavaVersion.VERSION_1_6    repositories{        mavenCentral()    }       //Anything else you would need here that would be shared across all subprojects}

in /module/build.gradle put

buildscript {    repositories {        mavenCentral()    }       dependencies {        classpath 'com.android.tools.build:gradle:0.4.2'    }   }evaluationDependsOn(':project1')evaluationDependsOn(':project2')apply plugin: 'android'android {    compileSdkVersion 17    buildToolsVersion "17.0"}dependencies {    compile project(":project1:A1")    compile project(":project1:B1")    compile project(":project1:Z1")    compile project(":project2:A2")    compile project(":project2:B2")    compile project(":project2:Z2")}


If you have folders matching that structure you can apply the same build logic to multiple projects.

If your settings.gradle contains

include ':project2:moduleA2'

then ':project2' is also a project, and it can have its own build.gradle, in which you can write:

subprojects { project ->    apply plugin 'android-library'    // more configuration}

If you don't apply any plugin to ':project2' itself then this project simply won't output anything (which is probably what you want) but that way you can configure all its sub-project in a simple go.

Then you can also have all your submodule put some logic that's specific to them

You can also technically do that in project2/build.gradle if you want to keep it all in the same file. You can read http://www.gradle.org/docs/current/userguide/multi_project_builds.html to see how to configure subprojects from a parent build.gradle file, accessing either all subprojects or a specific one, or using filtering.