有没有办法在build.gradle中为不同的productFlavor指定不同的应用标签(名称)?例如:
productFlavors {
stage {
app name with "-stage" suffix
}
preprod {
app name with "-preprod" suffix
}
prod {
app name without any suffix
}
}
答案 0 :(得分:3)
您可以按如下方式实现:
android:label="@string/app_name"
。 app_name
strings.xml
醇>
按如下方式更改build.gradle:
productFlavors {
stage {
resValue "string", "app_name", "stage"
}
preprod {
resValue "string", "app_name", "preprod"
}
prod {
resValue "string", "app_name", "prod"
}
}
答案 1 :(得分:2)
步骤1:在main
来源集中定义一个字符串资源,用于android:label
值。
步骤2:在main
源集的清单中,将该字符串资源应用于android:label
属性(例如android:label="@string/whatever"
)。
步骤3:对于您希望android:label
具有不同值的任何构建类型,产品风格或构建变体,请在现有{{1}旁边创建一个源集(例如app/src/stage/
})并将您想要的值放在该源集的字符串资源中(例如,app/src/main/
带有app/src/stage/res/values/strings.xml
字符串资源。)
当您构建应用时,Android将使用针对您的字符串资源的特定于构建的源集,如果您没有覆盖它,则会回退到whatever
。
如果您肯定想在Gradle中定义它 - 例如,您将在构建时以编程方式生成标签值 - use resValue
statements,而不是在XML中定义字符串资源。您仍然会在清单中使用该字符串资源,我建议您在main
中使用默认值作为后备。
答案 2 :(得分:1)
您可以使用resValue "string", "app_name", "label (name) "
创建。从app_name
文件中删除string.xml
。
喜欢:
productFlavors {
stage {
resValue "string", "app_name", "Stage"
}
preprod {
resValue "string", "app_name", "Preprod"
}
prod {
resValue "string", "app_name", "Prod"
}
}
答案 3 :(得分:0)
我的一位朋友提出了一个基于injecting build variables into the manifest的非常好的解决方案。它甚至允许使用本地化的应用标签。所以这就是:
1)在android:label
中指定AndroidManifest.xml
,如下所示:
android:label="${appLabel}"
2)在应用级build.gradle
中指定默认值:
manifestPlaceholders = [appLabel:"@string/appName"]
3)覆盖所需产品口味的值:
productFlavors {
stage {
manifestPlaceholders = [appLabel:"@string/appNameStage"]
}
preprod {
manifestPlaceholders = [appLabel:"@string/appNamePreprod"]
}
prod {
// Just let it use a default value
}
}
4)添加您要引用的字符串资源(appName
,appNameStage
,appNamePreprod
)。如果需要,可以将它们本地化。