Как определить две разные версии строки для разных видов продукта? - PullRequest
3 голосов
/ 16 января 2020

Я создаю приложение, которое имеет два вкуса - бесплатное и платное. Они определены в build.gradle (app) следующим образом:

flavorDimensions "mode"
productFlavors {
    free {
        applicationId "appid.free"
        versionName "2.0.4-free"
        buildConfigField "boolean", "PAID_VERSION", "false"
    }
    paid {
        applicationId "appid.paid"
        versionName "2.0.4-paid"
        buildConfigField "boolean", "PAID_VERSION", "true"
    }
}

Когда я собираю разные версии, я хочу, чтобы определенные строки добавлялись по-разному в зависимости от того, какой аромат мы создаем.

Итак, у меня есть обычные строки. xml файл, который содержит строки, общие для обоих вариантов.

Затем я определил 2 другие версии строк. xml, в:

src/free/res/values/strings.xml
src/paid/res/values/strings.xml

Содержит строки, зависящие от аромата. Каждая строка имеет одно и то же имя в обоих файлах, так что макет просто ссылается на общее имя, после чего должна быть указана правильная версия.

Это прекрасно работает, когда я собираю бесплатную версию, но когда я пытаюсь для сборки платной версии я получаю следующую ошибку:

Found item String/help_settings more than one time

Строка «help_settings» определяется как в бесплатной, так и в платной версиях строк. xml, но не в основной версии. Насколько я понимаю, читая онлайн-документацию Android Studio, сборка должна знать, какие версии файла строк. xml использовать, и игнорировать ту, которая ей не нужна, но, похоже, знает все 3 версий и, следовательно, находит дубликаты определений.

Что я делаю не так?

РЕДАКТИРОВАТЬ ДОБАВИТЬ: Когда я go в Activity, где используется ошибочная строка, если я выделю ее и выполните "CTRL-B" до go для объявления, в нем перечислены 2 места, где оно было объявлено. Оба этих объявления указывают на один и тот же файл: src / paid / res / values ​​/ strings. xml

Я проверил, что я не объявил его дважды в одном файле или что-то подобное, но у меня точно нет.

...