without with studio plugin extension create annotation android annotations kotlin

android - with - Referencia no resuelta: Kotlin necesita 2 compilaciones después de limpiar para recoger el código cuando usa kapt



kotlin without android studio (1)

En nuestra aplicación de Android, estamos utilizando DBFlow para acceder a la base de datos SQLite. Estamos haciendo referencia a las clases generadas por DBFlow a través de Kotlin. Ya somos conscientes del hecho de que tenemos las clases modelo y la clase de base de datos en Java, ya que la generación de código no funcionará al escribir estas clases en Kotlin.

Sin embargo, todavía tenemos que compilar el código dos veces después de limpiar cada proyecto. La ejecución de la primera compilación en un dispositivo da como resultado ClassNotFoundExceptions para clases de Kotlin aparentemente aleatorias (incluso si no tienen acceso al código generado por DBFlow o cualquiera de las clases modelo definidas por nosotros). Lo mismo ya se informó en el momento de la compilación al habilitar Proguard, lo que, por supuesto, falla en la compilación. La segunda construcción siempre tiene éxito.

Lo gracioso es que la generación de código ya funciona en la primera ejecución: las clases están ahí y también son recogidas por el IDE. Pero el compilador de alguna manera no puede encontrarlos, lo que me hace pensar que la generación de código ocurre demasiado tarde en el proceso de compilación. Por otro lado, como se explicó anteriormente, también hay clases no encontradas que no tienen que hacer nada con la generación de código y / o el procesamiento de anotaciones.

Entonces, ¿hay una mejor solución a este problema que una segunda compilación?

Para referencia, las partes relevantes de build.gradle de nuestra aplicación se build.gradle así: al igual que la documentación de DBFlow está sugiriendo:

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 }

Edición: encontré que también tengo que reconstruir dos veces por cada cambio que hago en el código. Se compila correctamente en la primera compilación si no limpié antes, pero los cambios simplemente no se recogen.


Si usas kotlin y retrolambda esto podría arreglarlo:

me.tatarka:gradle-retrolambda:3.4.0

github gist