When developing an Android app I had the need of setting different server URL for each flavor, because it has a server instance for each company that uses our product. Also we use a development server and a production server, so I came to this problem, because there is no way to set a buildConfigField for each variant (company1Debug, company1Release, company2Debug, …), but only for builtType OR productFlavor.
To achieve this goal, I found on web a similar config in David Medenjak’s blog, that uses flavors with ext values to dynamically config the value of BuildConfig.URL. But I prefer to keep using buildTypes as I feel it’s semantically more accurate than having development and production flavors too.
android { buildTypes { debug { } release { } } productFlavors { company1 { versionNameSuffix "-company1" ext { server = [debug: "https://dev.company1.com.br", release: "https://company1.com.br"] } } company2 { versionNameSuffix "-company2" ext { server = [debug: "https://dev.company2.com.br", release: "https://company2.com.br"] } } } ... }
I don’t have much experience with Groovy (Gradle language), but I used David’s idea to have ext values in each flavor. I created a “server” variable that is a dictionary, where the key is the build type and the value is the server URL that this variant (flavor+buildType) must use.
Then, we need a task to use the ext.server dictionary and set the buildConfigValue accordingly:
Continue reading