Gradle resValue causes duplicate string resources

天涯浪子 提交于 2019-12-04 19:31:10

问题


My Android manifest file defines the app name as follows:

android:label="@string/app_name"

A corresponding entry for app_name exists in res/values/strings.xml

Now, in my build.gradle, I redefine the app name for beta build as follows:

buildTypes {

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

However, when I assemble the package, Gradle complains of a duplicate string resource.

I could simply remove the app_name token from string.xml. However, in that case, Android Studio reports a problem with the manifest file.

How do I fix this? Regards.


回答1:


Shouldn't have to mess with a 'resValue.' You can use the debug sourceset which will allow you to redefine other strings in debug as well. Create the following file and redefine the 'app_name' string in there.

src/debug/res/values/strings.xml

Just make sure you don't have anything like the following in your build.gradle's sourceSets

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



回答2:


I came across the same issue too. My solution is to use Manifest-placeholder.

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

In your defaultConfig closure, set the value

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

And Change that value in your flavors.

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

Drawback:

  • HardCode appName in flavor. (which may or may not be a deal)

To fix that drawback, you can combine Manifest-placeholder and resValue, which is to create a resource use resValue and to change android:label to your resource.



来源:https://stackoverflow.com/questions/32259741/gradle-resvalue-causes-duplicate-string-resources

工具导航Map