Android Gradle. How to combine Flavors with buildTypes

For my specific problem, where the URLs differ a lot one to another, I couldn’t make it work with Flavours and BuildTypes.

I was able to define the debug/production URLs by using specific strings.xml for each build variant (which is each combination of flavour and build type):

These are the folder structures to do so:

src/flavour1Debug/res/values/strings.xml 
src/flavour1Release/res/values/strings.xml 

and

src/flavour2Debug/res/values/strings.xml 
src/flavour2Release/res/values/strings.xml 

EXTRA:
This can also be used to host different google-services.json files

Try something like this:

buildTypes {
    debug {
        buildConfigField("String", "BASE_URL_PATH", ""devApi/"")
    }
    release {
        buildConfigField("String", "BASE_URL_PATH", ""prodApi/"")
    }
}

flavorDimensions "client"
productFlavors {
    company1{
        dimension "client"
        buildConfigField("String", "BASE_URL_DOMAIN", ""https://app.company1/"")
    }

    company2 {
        dimension "client"
        buildConfigField("String", "BASE_URL_DOMAIN", ""https://app.company2/"")
    }
}

And use it like:

String BASE_URL = BuildConfig.BASE_URL_DOMAIN +
BuildConfig.BASE_URL_PATH

Here is the working example

// Specifies one flavor dimension.

flavorDimensions "version"

productFlavors {
dev {
    dimension "version"
    applicationId "com.example.lk"
    versionCode 1
    versionName "1.0.1"
    buildConfigField("String", "BASE_URL_PATH", ""https://app.dev.com/api/v1/"")
}

prod {
    dimension "version"
    applicationId "com.example.in"
    versionCode 1
    versionName "1.0.1"
    buildConfigField("String", "BASE_URL_PATH", ""https://app.prod.com/api/v1/"")

}
staging {
    dimension "version"
    applicationId "com.example.other"
    versionCode 1
    versionName "1.0.1"
    buildConfigField("String", "BASE_URL_PATH", ""https://app.staging.com/api/v1/"")

}}




buildTypes {
    release {
      minifyEnabled true
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
    debug {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }

you can access it like this

String baseURL =BuildConfig.BASE_URL_PATH;

Leave a Comment