I have 2 buildTypes (debug, release) and 2 productFlavors (product1, product2). I want to define a buildConfigField for each buildType and productFlavors. The buildConfigField is the url the app to download data from the server, and it changes for each productFlavor and buildTypes.
Now, I have:
buildTypes {
debug {
debuggable true
}
release {
debuggable false
}
}
productFlavors {
product1 {
buildConfigField STRING, "URL_BASE", '"https://api1.release.com"'
}
product2 {
buildConfigField STRING, "URL_BASE", '"https://api2.release.com"'
}
}
But I want something like this:
buildTypes {
debug {
debuggable true
}
release {
debuggable false
}
}
productFlavors {
product1 {
debug {
buildConfigField STRING, "URL_BASE", '"https://api1.debug.com"'
}
release {
buildConfigField STRING, "URL_BASE", '"https://api1.release.com"'
}
product2 {
debug {
buildConfigField STRING, "URL_BASE", '"https://api2.debug.com"'
}
release {
buildConfigField STRING, "URL_BASE", '"https://api2.release.com"'
}
}
}
How I can achieve this?
Update:
Each URL_BASE has a different pattern so I can't group the URLs. A posible solution is to add the url base of the 2 flavor in the different build types and select the right one in the flavor.
buildTypes {
debug {
debuggable true
buildConfigField STRING, API_VARIANT_PRODUCT1, '"api1.deb.com"'
buildConfigField STRING, API_VARIANT_PRODUCT2, '"api2.debug.com"'
}
release {
debuggable false
buildConfigField STRING, API_VARIANT_PRODUCT1, '"api1.release.com"'
buildConfigField STRING, API_VARIANT_PRODUCT2, '"api2.release.com"'
}
}
productFlavors {
product1 {
buildConfigField STRING, URL_BASE, '"https://" + API_VARIANT_PRODUCT1 + "/v1"'
}
product2 {
buildConfigField STRING, URL_BASE, '"https://" + API_VARIANT_PRODUCT2 + "/v1"'
}
}
}
UPDATE 2
If you need to add resources in gradle, like a 'KEY_MAP' the solution is in this page.
@Beni, you can use something like this
The problem with what you were proposing to do is that the last definition of the the
buildConfigField STRING, "URL_BASE"
values for eachbuildType
will get used in all product flavors. So what you would end up with would be something like"https://api2.release.com"
in both release versions.Using the above you will end up with something like this in your
BuildConfig
files for each variantHope this helps.
Build Type is not part of Product Flavor and vice versa. Variant is calculated based on both build type and product flavor. Using this you can just create either an extension (option 1) or a property (option 2) with a consistent format using both product flavor and build type.
Option 1
Option 2
in gradle.properties
in build.gradle
I don't know how you can set different values for multiple BuildVariants (build types + flavor) in
build.gradle
with thebuildConfigField
method.However you can use a different value for your
url_base
insideres/values/strings.xml
.Something like:
Then you can create the same string resource in these folders:
Of course it isn't the same to have a value inside the
BuildConfig
and is less confortable than the configuration withbuild.gradle
.