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

时间:2015-08-27 21:27:51

标签: android android-gradle

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

android:label="@string/app_name"

app_name的相应条目存在于res / values / strings.xml

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

buildTypes {

    beta {
        applicationIdSuffix ".beta"
        debuggable true
        resValue "string", "app_name", "MyTest Beta"
    }
}

但是,当我组装包时,Gradle会抱怨重复的字符串资源。

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

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

2 个答案:

答案 0 :(得分:7)

不应该混淆一个resValue。'您可以使用调试源集,它允许您在调试中重新定义其他字符串。创建以下文件并重新定义' app_name'那里的字符串。

src/debug/res/values/strings.xml

请确保您在build.gradle的sourceSets中没有以下任何内容

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

答案 1 :(得分:5)

我也遇到过同样的问题。 我的解决方案是使用Manifest-placeholder

<application
    android:label="${APP_NAME}"
    tools:replace="android:label">

defaultConfig关闭中,设置值

defaultConfig {
    addManifestPlaceholders([APP_NAME: "@string/app_name"])
}

并改变你的口味中的价值。

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

缺点:

  • HardCode appName的味道。 (可能是也可能不是交易)

要解决这个问题,您可以合并Manifest-placeholderresValue,即创建资源使用resValue并将android:label更改为您的资源。