2014-11-29 2 views
5

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

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

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

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

И конфигурации:

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 я ставлю общие классы 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

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

+0

Я подозреваю, что нет никакой необходимости в 'commonflavor' множества источников. Эти файлы могут очень просто оставаться под 'src/main' и наследоваться по умолчанию всеми вкусами. –

ответ

2

Лучшее решение, что я Основательны написать все классы в приложении \ SRC \ основной и добавить при необходимости:

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

Я немного опасаюсь такого подхода, потому что apk можно декомпилировать, а 'FLAVOR' легко изменился на' pro'. –

+4

Но не увеличивайте размер вашего apk, так как он содержит все файлы, но когда вы используете компоновку типа аромата, ваш нежелательный поданный флейвор не будет скомпилирован и ваш размер apk уменьшится. –