在我的应用中,我有很多不同的产品口味,实际上是10种。
对于其他语言,它们的完成方式类似于:eng_testDebug,eng_prodDebug,eng_testRelease,eng_prodRelease等。
因此,现在我有一个任务,要在应用名称中添加“-Test”以在构建名称中使用test进行构建。
现在,我找到了一种从主sourceSet解析string.xml并使用gradle文件中的manifestPlaceHolders构建我的应用程序名称的解决方案。但这仅适用于主要口味。
这是获取我正在使用的默认strings.xml app_name的代码:
def getAppName() {
def stringsFile = android.sourceSets.main.res.sourceFiles.find { it.name.equals 'strings.xml' }
String s = new XmlParser().parse(stringsFile).string.find { it.@name.equals 'app_name' }.text();
return s.replaceAll("\"", "");
}
在这里,我对其进行修改以添加“测试”:
def getEditedAppName() {
if (getCurrentFlavor().contains("test")) {
return getAppName() + "(Test)";
} else {
return getAppName();
}
}
getCurrentFlavor()向我返回了:assemble任务中使用的 flavor 名称。
基本上,问题是如何根据我当前的建筑风格如何获取其他sourceSet文件,以便可以解析flavor的app_name?
不幸的是,对于gradle文件中的每种口味而言,否决app_name字符串对我而言不是有效的选择。
最佳答案
对于每种口味,您都可以在src文件夹中创建一个类似于该口味的文件夹。在那您还应该看到您的主文件夹。在这些 flavor 文件夹中,您可以创建res文件夹并覆盖或添加其他资源文件。
在这里,您可以创建strings.xml并更改应用程序名称以及可绘制对象等。
http://ptrprograms.blogspot.de/2014/08/build-variations-using-gradle-and.html
根据评论进行编辑:
我有以下两种口味:
productFlavors {
appFlavorA{
applicationId "de.test.appaA"
}
appFlavorB{
applicationId "de.test.appaB"
}
}
现在,我得到了strings.xml的以下结构
ProjctRoot/app/src/main/res/values/strings.xml
ProjctRoot/app/src/appFlavorA/res/values/strings.xml
ProjctRoot/app/src/appFlavorB/res/values/strings.xml
这将导致为flavorflavor使用相应的strings.xml
关于android - 从string.xml获取app_name以获取Gradle中的当前产品 flavor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41742241/