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