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

Pet*_*ter 10 android android-gradle-plugin

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

android:label="@string/app_name"
Run Code Online (Sandbox Code Playgroud)

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

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

buildTypes {

    beta {
        applicationIdSuffix ".beta"
        debuggable true
        resValue "string", "app_name", "MyTest Beta"
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

我该如何解决?问候.

Mik*_*ike 7

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

src/debug/res/values/strings.xml
Run Code Online (Sandbox Code Playgroud)

只需确保build.gradle的sourceSets中没有以下内容

debug.setRoot('build-types/debug')
Run Code Online (Sandbox Code Playgroud)


lan*_*ung 7

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

<application
    android:label="${APP_NAME}"
    tools:replace="android:label">
Run Code Online (Sandbox Code Playgroud)

defaultConfig闭包中,设置值

defaultConfig {
    addManifestPlaceholders([APP_NAME: "@string/app_name"])
}
Run Code Online (Sandbox Code Playgroud)

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

buildTypes {
    beta {
        applicationIdSuffix ".beta"
        debuggable true
        addManifestPlaceholders([APP_NAME: "MyTest Beta"])
    }
}
Run Code Online (Sandbox Code Playgroud)

退税:

  • 风格中的HardCode appName.(可能是也可能不是交易)

为了解决这个问题的缺点,你可以结合Manifest-placeholderresValue,这是创建一个资源利用resValue和改变android:label你的资源.