我的Android有多个productFlavors
。我希望调试版本的android:label
(例如flavor1
)说Flavor1 Debug
,发布版本说Flavor1
。
没有productFlavors
这相对简单,只需在调试和发布源文件夹中创建不同的string
资源,但使用productFlavors
,我不想创建{每个风格的{1}},flavor1Debug
等文件夹,其中只有一个flavor2Debug
资源。
有办法做到这一点吗?我猜测它需要以某种方式合并资源,但我不确定如何。
对于额外的积分,如果我可以为应用程序图标添加叠加层,即合并两个图像,那将会很棒,但我意识到这可能会让它过得太远。
答案 0 :(得分:0)
我为此制定了解决方案。基本上,您使用以下方法复制读取构建文件,修改属性值,然后重写文件。
def debugAppRename(variant, labelResource) {
def flavor = variant.productFlavors.get(0)
def buildtype = variant.buildType
// Append buildType name to app label
if(buildtype.debuggable) {
variant.mergeResources << {
def valuesFile = "$buildDir/res/all/${flavor.name}/${buildtype.name}/values/values.xml"
def values = (new XmlParser()).parse(valuesFile)
values.string.each { m->
if (m.@name == labelResource) {
m.value = m.text() + " " + buildtype.name.capitalize()
new XmlNodePrinter(new PrintWriter(new FileWriter(valuesFile)))
.print(values)
}
}
}
}
}
使用它的方法是:
applicationVariants.all { variant ->
debugAppRename(variant, 'app_name') // where `app_name` is the string resource you use for the `app:label` property in your AndroidManifest.xml
}
如果是可调试的buildType,则生成的应用程序将附加buildType名称,例如: My App Debug
,My App Staging
等。release
版本不受影响。
我还把它放在gist
上。
您可以使用build.gradle
指令将apply from:
应用于原始要点网址,或将上述内容复制到您的代码中(我个人觉得构建脚本太大,所以我更喜欢申请)。