Я работаю над проектом Android, который использует Flavors
. Сейчас в моем проекте 4 вкуса, но скоро будет 6-7 вкусов.
Допустим, у меня есть 4 вкуса, f1, f2, f3 и f4.
Я хорошо знаком с ресурсами Android в main /, которые переопределяются ресурсами в вариантах, но классы нет (ср. Ошибка компиляции "duplicate classes"). Поэтому, если у меня MyClass
в main / и я хочу изменить этот класс только в f3 , я понимаю, что есть несколько решений:
- Удалите MyClass из main / и поместите его во все разновидности, затем внесите изменения в f3 / MyClass. Это приведет к адскому обслуживанию, я не хочу этого делать.
- Иметь в main / a
AbstractMyClass
, содержимое которого совпадает с MyClass, наследовать его с пустым MyClass в f1, f2, f4, наследовать в f3 и вносить изменения. Опять же, мне не нравится это решение, потому что оно заставляет число классов расти очень быстро, и это ухудшает читабельность проекта. На самом деле проект, с которым я сейчас работаю, использует это решение, и это кошмар, так как проект большой.
Я нашел другое решение с этим красивым постом: https://stackoverflow.com/a/30548238/8096984.
В этом посте описывается, что f1, f2 и f4 будут иметь ссылку на общий дополнительный sourceSet, содержащий MyClass (так что MyClass больше не будет в main / больше), а f3 не будет его иметь. Так что можно было бы свободно определять собственную реализацию MyClass без ошибки дублирующегося класса.
Это решение кажется лучшим из 3, но для 1 переопределения.
Что если теперь у меня есть MyClass2, который я хочу изменить только в f2? Если бы я поместил MyClass2 в дополнительный sourceSet, мне пришлось бы связать f3 с sourceSet и, следовательно, нарушить первое переопределение, которое я сделал из-за ошибки дублирующегося класса.
Нужно ли создавать другой исходный набор? Если я это сделаю, то мне не очень нравится это решение, потому что вы можете представить количество исходных наборов, которые мне пришлось бы создать в большом проекте, использующем 6-7 вариантов ...
Что мне делать?