Как получить гибкий способ переопределения классов Java / Kotlin с помощью Android Flavors? - PullRequest
1 голос
/ 26 июня 2019

Я работаю над проектом 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 вариантов ...

Что мне делать?

...