我想为每种构建类型和风格解析manifestPlaceholders依赖项。例如,我有
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']
}
是否有任何解决方案可以添加'Dev'后缀来调试产品风格?
感谢您的帮助
答案 0 :(得分:18)
只是为上面的评论提供一个有效的例子:
在resValue
中声明defaultConfig
,它将成为应用程序的名称。 (注意:如果您选择为其命名app_name
,请确保从app_name
文件中删除原始strings.xml
属性,否则会发生冲突。)< / p>
defaultConfig {
// applicationId, versionCode, etc.
(...)
// define your base Applications name here
resValue 'string', 'app_name', 'MyApp'
}
按照您的设置设置productFlavors
。如果可以将应用程序的名称仅与样式名称连在一起,则可以将它们留空,或者提供明确的resValue
,它将覆盖defaultConfig
的值。
productFlavors {
dev {
// resValue 'string', 'app_name', 'MyAppDevFlavor'
}
prod {
// resValue 'string', 'app_name', 'MyAppProdFlavor'
}
}
在gradle配置时配置resValue
的名称
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
}
在AndroidManifest中,设置app_name
字段:
<application
...
android:label="@string/app_name"
...
>
如上所述,请务必从app_name
strings.xml
媒体资源