如何赋予由flavor定义的strings.xml优先于由库定义的strings.xml?

时间:2019-07-04 17:51:25

标签: android android-resources

我有一个具有多种样式的Android应用,每种样式在其自己的strings.xml文件中定义app_name字符串。最近,我合并了一个新库,该库在其自己的strings.xml文件中为app_name定义了自己的值。问题是合并资源中app_name的最终值是库定义的app_name值。如何将风味app_name值赋予优先级?

当前,我在每种口味的单个strings.xml文件中为app_name定义特定值。

我希望app_name值是风味值,而不是库值。

更新: 我的口味定义如下:

    productFlavors {
        doctoronline {
            dimension "client"
            applicationId 'com.doctoronline.doctoronline'
            resValue 'string', 'filebrowser_provider', 'com.doctoronline.doctoronline.aditya.fileprovider'
            buildConfigField 'String', 'CORPORATE_DOMAIN', '"e4c4aa0f523941d2a332d15101f12e9e"'
            buildConfigField 'String', 'SHORT_NAME', '"DRONLINE"'
            buildConfigField 'String', 'WAITING_MESSAGE', '"DRONLINE_WAITING_MESSAGE_PATIENT_DEFAULT"'
        }
        mapfre {
            dimension "client"
            applicationId 'com.doctoronline.mapfre'
            resValue 'string', 'filebrowser_provider', 'com.doctoronline.mapfre.aditya.fileprovider'
            buildConfigField 'String', 'CORPORATE_DOMAIN', '"3282a15f144e288bac4c07b1598e9234"'
            buildConfigField 'String', 'SHORT_NAME', '"mapfre"'
            buildConfigField 'String', 'WAITING_MESSAGE', '"MAPFRE_WAITING_MESSAGE_PATIENT_DEFAULT"'
        }
...
//4 or 5 extra flavors
}

我要添加的库是this

1 个答案:

答案 0 :(得分:2)

如果您要根据自己构建的产品风味来更改应用名称,则有两种选择:
1.使用resValue。这可以帮助您向应用程序中添加一些资源,例如字符串资源,颜色资源。
2。使用manifestPlaceHolder。这可以帮助您从build.gradle文件向Android清单文件添加变量,并通过构建类型或产品口味来更改这些变量。

这是将resValue添加到产品风味中的方法

productFlavors {
        flavor1 {
            dimension = 'test'
            resValue("string", "app_name", "MY APP NAME")
        }
        flavor2 {
            dimension = 'test'
            resValue("string", "app_name", "MY APP NAME")
        }
    }

如果您的strings.xml具有名称为 app_name 的字符串,则必须将其删除,以免出现重复res值消息。
检查是否通过不同的产品口味更改了应用程序名称,从而改变了您的产品支持并构建了项目,然后检查清单文件中应用程序标记中显示的值。

第二种方法是使用manifestPlaceHolder。在您的产品风格中添加manifestPlaceHolder,然后在清单文件中的应用程序标记内使用此变量

productFlavors {
        flavor1 {
            dimension = 'test'
            manifestPlaceholders=[appName: 'MY APP NAME']
        }
        flavor2 {
            dimension = 'test'
            manifestPlaceholders=[appName: 'MY APP NAME']
        }
    }

然后导航到您的android清单文件

<application
        android:name=".DemoApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="${appName}"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
...
</application>

希望这个答案会有所帮助。编码愉快。