Android Gradle resValue导致字符串资源重复

Android Gradle resValue导致字符串资源重复,android,android-gradle-plugin,Android,Android Gradle Plugin,我的Android清单文件定义应用程序名称,如下所示: android:label="@string/app_name" buildTypes { beta { applicationIdSuffix ".beta" debuggable true resValue "string", "app_name", "MyTest Beta" } } res/values/strings.xml中存在app_name的对应条目 现在

我的Android清单文件定义应用程序名称,如下所示:

android:label="@string/app_name"
buildTypes {

    beta {
        applicationIdSuffix ".beta"
        debuggable true
        resValue "string", "app_name", "MyTest Beta"
    }
}
res/values/strings.xml中存在app_name的对应条目

现在,在我的build.gradle中,我重新定义了beta版的应用程序名称,如下所示:

android:label="@string/app_name"
buildTypes {

    beta {
        applicationIdSuffix ".beta"
        debuggable true
        resValue "string", "app_name", "MyTest Beta"
    }
}
然而,当我组装包时,Gradle抱怨说有重复的字符串资源

我可以简单地从string.xml中删除app_name标记。但是,在这种情况下,AndroidStudio报告清单文件存在问题


我该如何解决这个问题?注意。

不应该弄乱“resValue”。您可以使用调试源集,这将允许您在调试中重新定义其他字符串。创建以下文件并在其中重新定义“app_name”字符串

src/debug/res/values/strings.xml
只需确保您的构建中没有类似于以下内容的内容

debug.setRoot('build-types/debug')

我也遇到了同样的问题。 我的解决方案是使用
清单占位符

<application
    android:label="${APP_NAME}"
    tools:replace="android:label">
改变你口味中的价值

buildTypes {
    beta {
        applicationIdSuffix ".beta"
        debuggable true
        addManifestPlaceholders([APP_NAME: "MyTest Beta"])
    }
}
缺点:

  • flavor中的硬编码appName。(可能是交易,也可能不是交易)

要解决这个缺点,您可以将
Manifest placeholder
resValue
组合起来,这将创建一个资源使用
resValue
,并将
android:label
更改为您的资源。

您尝试过“别名”吗<代码>@string/app\u name\u alias在xml中,以及
resValue“string”、“app\u name\u alias”、“MyTest Beta”
在gradle中(android studio将在参考资料中显示“错误”,但这至少应该编译工具的重要性:replace=“android:label”?