Ответ 1
Если вы используете kotlin и retrolambda, это может исправить:
me.tatarka:gradle-retrolambda:3.4.0
В нашем приложении для Android мы используем DBFlow для доступа к базе данных SQLite. Мы ссылаемся на классы, созданные DBFlow через Kotlin. Мы уже знаем о том, что у нас есть классы моделей, а также класс базы данных в Java, поскольку генерация кода не будет работать при написании этих классов в Kotlin.
Однако нам по-прежнему приходится создавать код дважды после каждого проекта. Выполнение первой сборки на устройстве приводит к ClassNotFoundExceptions
для кажущихся случайными классов Kotlin (даже если они не имеют доступа к коду, сгенерированному DBFlow или любым из классов моделей, определенных нами). То же самое сообщается уже во время компиляции при включении Proguard, который, конечно же, не выполняет сборку. Вторая сборка всегда преуспевает.
Самое смешное, что генерация кода уже работает в первом запуске - классы есть и также подхвачены IDE. Но компилятор каким-то образом не может найти их, заставляя меня думать, что генерация кода происходит слишком поздно в процессе сборки. С другой стороны, как объяснялось выше, есть также классы, которые не найдены, которые не должны ничего делать с генерацией кода и/или обработкой аннотаций.
Итак, есть ли лучшее решение этой проблемы, чем вторая сборка?
Для справки, соответствующие части нашего приложения build.gradle
выглядят так же, как и в документации DBFlow:
def dbflow_version = "3.0.0-beta4"
dependencies {
kapt "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"
compile "com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}"
compile "com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}"
}
kapt {
generateStubs = true
}
Изменить: Я обнаружил, что мне также приходится перестраивать два раза для каждого изменения, которое я делаю в коде. Он правильно компилируется в первой сборке, если раньше я не чистил, но изменения просто не подбираются.
Если вы используете kotlin и retrolambda, это может исправить:
me.tatarka:gradle-retrolambda:3.4.0