Problemas de configuration de Kotlin Room en Android Studio

Estoy tratando de configurar un ejemplo simple de Room + Kotlin en Android Studio, pero realmente es un dolor hacerlo.

Tengo classs como:

@Entity(tableName = "test") data class Test(val name: String, val lastname: String) 

DAO

 @Dao interface TestDao { @Query("SELECT * FROM test") fun loadAll(): List<Test> @Insert fun insertAll(vararg tests: Test) @Delete fun delete(test: Test) } 

AppDatabase:

 @Database(entities = arrayOf(Test::class), version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun testDao(): TestDao } 

Mi build.gradle

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' android { compileSdkVersion 26 buildToolsVersion "26.0.2" defaultConfig { applicationId "com.example.roomtest" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } ext.roomVersion = '1.0.0-alpha9' dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation('com.android.support.test.espresso:espresso- core:3.0.1', { exclude group: 'com.android.support', module: 'support-annotations' }) // Room compile "android.arch.persistence.room:runtime:$roomVersion" compile "android.arch.persistence.room:rxjava2:$roomVersion" kapt "android.arch.persistence.room:compiler:$roomVersion" } repositories { mavenCentral() } 

Build.gradle (proyecto)

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = '1.1.51' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0-beta7' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() maven { url 'https://maven.google.com' } } } task clean(type: Delete) { delete rootProject.buildDir } ext { archRoomVersion = "1.0.0-alpha9" } 

E bash hacer una inserción sencilla en mi database en MainActivity:

 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "database-name").build(); Test test = new Test("test1", "test2"); db.testDao().insertAll(test); } } 

Sin embargo, el proyecto no se puede comstackr y el error es:

Advertencia: advertencia: versión de origen compatible 'RELEASE_7' del procesador de anotación 'android.arch.persistence.room.RoomProcessor' less que -source '1.8'

Error: ejecución fallida para la tarea ': aplicación: kaptDebugKotlin'. Error interno del comstackdor Ver logging para más detalles

¿Cómo puedo configurar este ejemplo realmente simple? Estoy atascado, buscando la configuration correcta en este momento.

ACTUALIZAR:

Cuando cambio la configuration de mi habitación en gradle como esta:

 // // Room // implementation "android.arch.persistence.room:runtime:$roomVersion" // implementation "android.arch.persistence.room:rxjava2:$roomVersion" // kapt "android.arch.persistence.room:compiler:$roomVersion" //room database implementation "android.arch.persistence.room:runtime:1.0.0-alpha9" annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha9" 

La aplicación ahora comienza, pero falla al principio y la exception es:

java.lang.RuntimeException: no se puede iniciar la actividad ComponentInfo {com.example.roomtest / com.example.roomtest.MainActivity}: java.lang.RuntimeException: no se puede encontrar la implementación para com.example.roomtest.AppDatabase. AppDatabase_Impl no existe en android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2416) en android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) en android.app.ActivityThread.-wrap11 (ActivityThread.java) en android .app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) en android.os.Handler.dispatchMessage (Handler.java:102) en android.os.Looper.loop (Looper.java:148) en android.app. ActivityThread.main (ActivityThread.java:5417) en java.lang.reflect.Method.invoke (Método nativo) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) en com.android. internal.os.ZygoteInit.main (ZygoteInit.java:616) Causado por: java.lang.RuntimeException: no se puede encontrar la implementación para com.example.roomtest.AppDatabase. AppDatabase_Impl no existe en android.arch.persistence.room.Room.getGeneratedImplementation (Room.java:90) en android.arch.persistence.room.RoomDatabase $ Builder.build (RoomDatabase.java:440) en com.example.roomtest .MainActivity.onCreate (MainActivity.java:17) en android.app.Activity.performCreate (Activity.java:6237) en android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1107) en android.app.ActivityThread.performLaunchActivity ( ActivityThread.java:2369)

Este RuntimeError ocurre porque el comstackdor de la sala no pudo generar la implementación de AppDatabase.

Te recomiendo que cambies la instrucción "comstackr" a "implementación" en tu file gradle. Creo que podría ayudar.

Estaba leyendo nuevamente tu file gradle y comparándolo con el mío y no veo en ninguna parte la implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" de esta línea implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"

DE ACUERDO.

Entonces la respuesta es poner esta línea en el file gradle:

  compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.51" 

Toda la configuration (Kotlin) permanece igual, y el gradle se ve así:

  // Room implementation "android.arch.persistence.room:runtime:$roomVersion" implementation "android.arch.persistence.room:rxjava2:$roomVersion" kapt "android.arch.persistence.room:compiler:$roomVersion" compile "org.jetbrains.kotlin:kotlin-stdlib:1.1.51" 

Espero que esto ayude a alguien, perdí demasiado time para esto

  • Kotlin class NoClassDefFoundError crash
  • Kotlin generics wildcard con extender
  • Copiando un file automáticamente con un pom
  • ¿Por qué no hay palabras key de concurrency en Kotlin?
  • Cómo usar KeyEvent en Kotlin
  • Observer onChanged nunca llamado
  • No se puede acceder a EditText u otros componentes de la interfaz de usuario con Kotlin
  • Sintaxis abreviada para generar el método toString () en Kotlin (para classs que no son de datos)
  • En Android Java / Kotlin, ¿la implementación de una interfaz le da acceso directo a las variables locales de la class de anidación?
  • ¿Por qué Kotlin necesita agrupar su time de ejecución después de comstackdo?
  • Conversión de methods de estilo de procedimiento a estilo funcional