У меня есть несколько версий моего приложения: общая версия, скажем, 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 }