Как отдать приоритет strings.xml, определенному flavor, над strings.xml, определенным библиотекой? - PullRequest
0 голосов
/ 04 июля 2019

У меня есть приложение Android с несколькими вариантами, каждый из которых определяет строку app_name в своем собственном файле strings.xml.Недавно я включил новую библиотеку, которая определяет свое собственное значение для app_name в своем собственном файле strings.xml.Проблема заключается в том, что окончательное значение для app_name в объединенных ресурсах - это значение app_name, определенное библиотекой.Как я могу придать приоритет значению аромата app_name?

В настоящее время я определяю конкретные значения для app_name в отдельном файле strings.xml для каждого аромата.

Я ожидаю, что значение 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 Ответ

2 голосов
/ 04 июля 2019

Если вы хотите изменить название своего приложения на основе созданного вами аромата продукта, у вас есть два варианта:1. используя resValue .это поможет вам добавить некоторые ресурсы в ваше приложение, такие как строковый ресурс, цветной ресурс.2. используя manifestPlaceHolder .это поможет вам добавить переменные в файл манифеста Android из файла build.gradle и изменить эти переменные с помощью типов сборки или разновидностей продукта.

это то, как добавить 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 values.чтобы проверить, изменилось ли имя приложения из-за разных вкусов продукта, изменить его и создать проект, а затем проверить, какие значения отображаются в теге приложения в файле манифеста.

Второй способ - это использование 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>

Надеюсь, этот ответ полезен.Удачного кодирования.

...