Resolve Application label for each build type
android, gradle, groovy, java
Solution
Just to give a working example to my comment above:
declare a `resValue` in your `defaultConfig` which will become the Application's name. (Attention: if you choose to name it `app_name`, be sure to delete the original `app_name` property from your `strings.xml` file, or it will clash.)
defaultConfig {
// applicationId, versionCode, etc.
(...)
// define your base Applications name here
resValue 'string', 'app_name', 'MyApp'
}
set your `productFlavors` as you did already. You can leave them empty if it is ok for you to concat your App's name with the flavor's name only, or provide an explicit `resValue`, which will override the value from `defaultConfig`.
productFlavors {
dev {
// resValue 'string', 'app_name', 'MyAppDevFlavor'
}
prod {
// resValue 'string', 'app_name', 'MyAppProdFlavor'
}
}
configure the `resValue`'s name at gradle configuration time
android.applicationVariants.all { variant ->
// get app_name field from defaultConfig
def appName = variant.mergedFlavor.resValues.get('app_name').getValue()
// concat new App name with each flavor's name
appName = "${appName}"
variant.productFlavors.each { flavor ->
appName += " ${flavor.name}"
}
// optionally add buildType name
appName += " ${variant.buildType.name}"
// your requirement: if buildType == debug, add DEV to App name
if(variant.buildType.name == "debug") {
appName += " DEV"
}
// set new resVale
variant.resValue 'string', 'app_name', appName
}
In your AndroidManifest, set the `app_name` field:
<application
...
android:label="@string/app_name"
...
>
As I mentioned above, be sure to delete the default `app_name` property from `strings.xml`
Problem
I want to resolve manifestPlaceholders dependency for each build types and flavors. For example, I have ``` productFlavors { dev { manifestPlaceholders = ['applicationLabel': 'DevFlavor'] } prod { manifestPlaceholders = ['applicationLabel': 'ProdFlavor'] } ..... buildTypes { debug { def old_name = manifestPlaceholders.get('applicationLabel'); // every time is null // def old_name = productFlavors.dev.manifestPlaceholders.get('applicationLabel'); // ITS OK, but not dynamic manifestPlaceholders = [applicationLabel: old_name + ' Dev'] } ``` Is the any solution to add 'Dev' suffix to debug product flavors? Thanks for any help