Базовый аромат Android без дублирования ошибки класса

У меня есть несколько версий моего приложения: общая версия, скажем, mainapp и несколько сборок для каждого клиента, например custom1 , custom2 , custom3 . И я хочу иметь базовый вкус для всех вкусов customX.

Я пытался сделать так:

Создать структуру проекта:

 app\src\main app\src\mainapp app\src\commonflavor app\src\custom3 

И config:

 productFlavors { mainapp { } custom1 { } custom2 { } custom3 { } } sourceSets { custom1 { java.srcDirs = ['src/commonflavor/java'] } custom2 { java.srcDirs = ['src/commonflavor/java'] } custom3 { java.srcDirs = ['src/commonflavor/java', 'src/custom3/java'] } } 

В commonflavor я commonflavor общие классы Java для всех customX-аксессуаров, например MainActivity.java и SecondActivity.java . Но в custom3 мне нужен отдельный SecondActivity.java .

В этом случае у меня есть error: duplicate class: SecondActivity из src/commonflavor/java и src/custom3/java .

На данный момент я решил это, используя класс dupllication:

 sourceSets { custom1 { java.srcDirs = ['src/commonflavor/java'] } custom2 { java.srcDirs = ['src/commonflavor/java'] } custom3 { java.srcDirs = ['src/custom3/java'] } } 

Я скопировал src/commonflavor/java из srcDirs и скопировал MainActivity.java в custom3 . Проблема в том, что у меня есть 2 клона файла MainActivity.java в src/commonflavor/java и src/custom3/java

Как разрешить эту ситуацию без дублирования кода?

Лучшее решение, которое я основал, – написать все классы в app \ src \ main и добавить там, где необходимо:

 if(BuildConfig.FLAVOR.equals("mainapp")) { // mainapp code } else { // coomon flavor code }