I have many flavors of my Android app, and I want all but one to use the same key. There is one that needs to use a different key.
How do I override the signingConfig
for just 1 flavor of the app (but within the same build type e.g. "release")?
gradlew assembleRelease
commandThis last point is important as I currently have over 120 different flavors and growing. In order to customise every single flavor individually is a lot of extra work.
Related posts I have tried:
Producing multiple builds signed with different keys from single build type
signingConfig
anywaySigning product flavors with gradle
buildTypes
inside the productFlavors
but I do not understand how to do this.Debug Signing Config on Gradle Product Flavors
Overall, each solution seems to still use the default release config, instead of my custom config.
Important parts of my build.gradle
look like this:
signingConfigs { releaseConfig { storeFile file('key') storePassword "pass" keyAlias "alias" keyPassword "pass" } custom { storeFile file('custom_key') storePassword "pass" keyAlias "alias" keyPassword "pass" } } productFlavors { apple { applicationId "demo.apple" } banana { applicationId "demo.banana" } // def customConfig = signingConfigs.custom custom { applicationId "custom.signed.app" // signingConfig customConfig } } buildTypes { debug { applicationIdSuffix ".debug" } release { signingConfig signingConfigs.releaseConfig // productFlavors.custom.signingConfig signingConfigs.custom } }
The Gradle Plugin User Guide says that you can:
have each release package use their own
SigningConfig
by setting eachandroid.productFlavors.*.signingConfig
objects separately.
This is demonstrated in this answer (Debug Signing Config on Gradle Product Flavors) and this blog post (Building Multiple Editions of an Android App with Gradle).
However, specifying a separate signingConfig
line for each flavor does not scale well, and was out of scope of the question. Unfortunately none of the provided answers showed how to correctly override a signingConfig
correctly.
The trick came from this answer (How to get the currently chose build variant in gradle?) which shows how to loop over build variants (and by extension, flavors).
My solution uses a loop to set the signingConfig
on each flavor instead of having a separate line for that. This scales perfectly well. The "override" is done with a single line that specifies the custom config after the loop.
Place the following code inside the buildTypes.release
block:
// loop over all flavors to set default signing config productFlavors.all { flavor -> flavor.signingConfig signingConfigs.releaseConfig } // override default for single custom flavor productFlavors.custom.signingConfig signingConfigs.custom
The below given code will use release1 as default signingConfig if signingConfig is not specified in the product flavor.
app/build.gradle
signingConfigs { debug { storeFile file("/home/.../debugkeystore.jks") storePassword "..." keyAlias "..." keyPassword "..." } release1 { storeFile file("/home/.../testkeystore1.jks") storePassword "..." keyAlias "..." keyPassword "..." } release2 { storeFile file("/home/.../testkeystore2.jks") storePassword "..." keyAlias "..." keyPassword "..." } release3 { storeFile file("/home/.../testkeystore3.jks") storePassword "..." keyAlias "..." keyPassword "..." } } defaultConfig { applicationId "com.example.signingproductflavors" minSdkVersion 15 targetSdkVersion 24 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" signingConfig signingConfigs.release1 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { signingConfig signingConfigs.debug } } productFlavors { blocks { applicationId "com.example.blocks" resValue 'string', 'APP_NAME', "Blocks" } cloud { applicationId "com.example.cloud" resValue 'string', 'APP_NAME', "Cloud" signingConfig signingConfigs.release2 } deck { applicationId "com.example.deck" resValue 'string', 'APP_NAME', "Deck" signingConfig signingConfigs.release3 } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With