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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With