У меня есть проект и у него есть 2 аромата продукта со своими собственными каталогами:
build.gradle:
android {
...
productFlavors {
free {
applicationId "com.sample.free"
buildConfigField "boolean", "free", "true"
}
paid {
applicationId "com.sample"
buildConfigField "boolean", "free", "false"
}
}
}
И у меня есть класс (например, PaidOperationClass
), который используется только в paid
. Итак, я поместил этот класс в каталог src/paid/java
. И у меня есть другой класс (например, CommonClass
), который используется обоими вкусами. Поэтому я помещал это в каталог src/main/java
:
src/main/ --> has CommonClass
src/free/
src/paid/ --> has PaidOperationClass
В CommonClass
У меня есть метод, например:
if(!BuildConfig.FREE) {
PaidOperationClass.doSomeStuff();
}
Таким образом, ссылка PaidOperationClass
указана (имеет импорт), но никогда не используется свободной сборкой.
Если я создаю приложение для paid
, все работает отлично. Но если я попытаюсь создать его для free
вкуса, он терпит неудачу, потому что ссылочный, но ненужный класс не найден. Как вы решаете это без репликации кода (класса/метода) (например, помещать фиктивный PaidOperationClass
под free
)? Есть ли какие-либо опции gradle, которые игнорируют такие ошибки сборки при построении?
Изменить: Мне нужно решение gradle, которое не нуждается в репликации кода. Пользовательский script на основе аннотации, возможно, удаляет ненужный код для вкусов продукта во время компиляции.