android - 从string.xml获取app_name以获取Gradle中的当前产品 flavor

标签 android gradle android-gradle-plugin

在我的应用中,我有很多不同的产品口味,实际上是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文件,以便可以解析f​​lavor的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/

相关文章:

java - 在 android 中从 byte[] 写入文件失败

java - 与主分支同步时,Sonarcloud 中不显示分支覆盖范围

java - Android 启动时出错

android - appcompat版本出现错误

android - 值等于dimens.xml 中的match_parent 和fill_parent?

java - Android - 以编程方式向 Activity 添加关键监听器

android - 在 Android 中获取 SSLPeerUnverifiedException

android-studio - 将旧项目导入Android Studio 2.0时出错

添加依赖项 com.google.android.material 后,Android Manifest Merger 失败

android - 在没有 Android Studio 的情况下构建项目