Global signingConfig for multi-project build

Viewed 1504

I'm using project structure like this:

root
  |--build.gradle
  |--settings.gradle
  |
  |--child1
  |    |--build.gradle
  |
  |--child2
       |--build.gradle

In both child projects build.gradle contains the following:

apply plugin: 'android'

...

android {
    ...

    signingConfigs {
        release {
            storeFile file("release.keystore")
            storePassword "pass"
            keyAlias "alias"
            keyPassword "pass"
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
    ...
}

How can I move signingConfigs part to the root project to reduce code duplication?

4 Answers

Very similar to Alans answer but mine is accepted by Gradle. I didn't find any downsites yet:

In the root build.gradle:

import com.android.build.gradle.internal.dsl.SigningConfig

ext {
    mySigningConfigs = [
            release : SigningConfig.newInstance([
                    keyAlias     : 'release',
                    keyPassword  : 'keyPassword',
                    storeFile    : file('release.jks'),
                    storePassword: 'storePassword'
            ]),
            debug: SigningConfig.newInstance([
                    keyAlias     : 'debug',
                    keyPassword  : 'keyPassword',
                    storeFile    : file('debug.jks'),
                    storePassword: 'storePassword'
            ])]
}

build.gradle in submodules:

android {
    buildTypes {
        release {
            signingConfig mySigningConfigs.release
        }

        debug {
            signingConfig mySigningConfigs.debug
        }
    }
}
Related