Different keyStore for different product flavors in Gradle

Viewed 4806

I have different productFlavors specified in my build.gradle file

 dev {
            applicationId "com.advancedprogressive.chare.dev"
            versionCode 83
            versionName "2.2.1"
        }
staging {
            applicationId "com.advancedprogressive.chare.qa"
            versionCode 119
            versionName "2.8.1"
        }

and have have signing configurations like

signingConfigs {
        release {
            storeFile 
            storePassword 
            keyAlias 
            keyPassword         }
        debug {
            keyPassword 
            storeFile 
            keyAlias 
            storePassword 
        }
    }

I have different keystors for both flavors. I can specify different keystores for different build types e.g debug/release but how can i specify different keysotre for each flavor.

4 Answers

You may also want to keep your credentials secured in a separate file.

In your app/build.gradle file

android{
    signingConfigs {
        free {
            def keystorePropertiesFile = rootProject.file("app/src/free/keystore.properties")
            def keystoreProperties = new Properties()
            keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }

        paid {
            def keystorePropertiesFile = rootProject.file("app/src/paid/keystore.properties")
            def keystoreProperties = new Properties()
            keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }

    ...

    flavorDimensions "default"
    productFlavors {
        free {
            applicationId "com.example.freeapp"
            versionCode 1
            versionName "1.0"
            signingConfig signingConfigs.free

        }
        paid {
            applicationId 'com.example.paidapp'
            versionCode 1
            versionName '1.0'
            signingConfig signingConfigs.paid
        }
    }
}

In your app/src/flavor_name/keystore.properties

storePassword=...
keyPassword=..
keyAlias=...
storeFile=src/flavor_name/keystore_file.jks //or any other path of jks file

For me, when building, it´s aways using Release signingConfigs.

Related