Gradle resValue 导致字符串资源重复

Gradle resValue causes duplicate string resources

我的 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"
    }
}

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

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

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

不必弄乱 'resValue.' 您可以使用调试源集,它也允许您在调试中重新定义其他字符串。创建以下文件并在其中重新定义 'app_name' 字符串。

src/debug/res/values/strings.xml

只需确保您的 build.gradle 的 sourceSets

中没有类似以下的内容
debug.setRoot('build-types/debug')

我也遇到了同样的问题。 我的解决方案是使用 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 更改为您的资源。