Room kapt error when upgrading kotlin or gradle

Viewed 5160

I have been having for a long time this problem: I cannot upgraded the gradle version and kotlin gradle plugin in my app in Android Studio, the only solution that I can think of is to start a project from scratch and move one by one every class.

My app uses Room and therefore kapt as annotation process. With this version of kotlin and gradle everything works perfectly:

classpath 'com.android.tools.build:gradle:4.0.2'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50'

my app gradle file

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
//Kapt is the annotation processor of kotlin, all the generated code Ex. @Room depends of it
apply plugin: 'kotlin-kapt'



kapt {
    generateStubs = true
    correctErrorTypes = true
    mapDiagnosticLocations = true

    javacOptions {
        // Increase the max count of errors from annotation processors.
        // Default is 100.
        option("-Xmaxerrs", 700)
    }
}

android {
    signingConfigs {
        Default {
            ...
        }
    }
    compileSdkVersion 29
    defaultConfig {
        applicationId "com.android.expenses"
        minSdkVersion 24
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        signingConfig signingConfigs.Default

        javaCompileOptions {
            annotationProcessorOptions {
                arguments += ["room.schemaLocation":
                                      "$projectDir/schemas".toString()]
            }
        }
    }
    sourceSets {
        // Adds exported schema location as test app assets.
        androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
    }
    buildTypes {
        debug {
            ....
        }

        release {
            ....
        }

    }
    
    configurations.all {
        resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9'
        //To avoid duplicate class clash
        exclude group: 'com.google.guava', module: 'listenablefuture'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    //Para parcelize y autobinding in kotlin
    androidExtensions {
        experimental = true
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

    //De databinding, y kotlinx
    /*dataBinding {
        enabled = true
    }*/
    //Substitule to 3 line above with this
    android.buildFeatures.dataBinding true
}

dependencies {
    //version definition
    def room_version = "2.2.5"
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    //androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {

    //    exclude group: 'com.android.support', module: 'support-annotations'

    //})
    testImplementation 'junit:junit:4.12'

    // Required for instrumented tests
    androidTestImplementation 'com.android.support:support-annotations:28.0.0'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'

    //Architecture
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.core:core:1.6.0'
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
    implementation 'com.google.android.material:material:1.4.0'

    implementation 'com.google.code.gson:gson:2.8.6'
    implementation 'joda-time:joda-time:2.7'
    implementation 'org.joda:joda-money:0.10.0'
    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation 'com.neovisionaries:nv-i18n:1.15'
    implementation 'de.hdodenhof:circleimageview:2.2.0'

    //ColorPicker
    implementation 'com.jaredrummler:colorpicker:1.1.0'

    //Image Cropper
    implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.0'

    // Google Sheet API y Google Drive
    implementation 'com.google.android.gms:play-services-auth:16.0.1'
    implementation 'pub.devrel:easypermissions:3.0.0'
    implementation('com.google.api-client:google-api-client-android:1.23.0') {
        exclude group: 'org.apache.httpcomponents'

    }

    // Google Sheet API
    implementation('com.google.apis:google-api-services-sheets:v4-rev504-1.23.0') {
        exclude group: 'org.apache.httpcomponents'

    }

    // Google Drive Rest
    implementation('com.google.apis:google-api-services-drive:v3-rev102-1.23.0') {
        exclude group: 'org.apache.httpcomponents'
    }

    //Google Drive Android
    implementation "com.google.android.gms:play-services-drive:$rootProject.playServices_version"

    //Google Maps
    implementation "com.google.android.gms:play-services-location:$rootProject.playServices_version"
    implementation 'com.google.android.gms:play-services-maps:16.1.0'

    //Google Maps Utils
    implementation 'com.google.maps.android:android-maps-utils:0.5'

    //Google Places
    implementation "com.google.android.gms:play-services-places:$rootProject.playServices_version"


    //MultiViewAdapter para mejores recyclerviews
    implementation 'com.github.devahamed:multi-view-adapter:1.2.6'
    implementation 'com.github.devahamed:multi-view-adapter-databinding:1.2.6'

    //CardView
    implementation 'androidx.cardview:cardview:1.0.0'

    //PagerSlidingTabStrip
    implementation 'com.jpardogo.materialtabstrip:library:1.1.1'

    //Room
    implementation "androidx.room:room-runtime:$room_version"
    //annotationProcessor "androidx.room:room-compiler:$room_version"

    // optional - Kotlin Extensions and Coroutines support for Room
    //implementation "androidx.room:room-ktx:$room_version"

    // Test helpers
    androidTestImplementation "androidx.room:room-testing:$room_version"
    kapt "androidx.room:room-compiler:$room_version"

    // Lifecycle components
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
    annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.3.1'
    kapt 'androidx.lifecycle:lifecycle-compiler:2.3.1'

    //Kotlin
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    // Coroutines
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9")

    // RxJava support for Room
    implementation 'androidx.room:room-rxjava2:2.0.0'

    //Android Palette API
    implementation 'androidx.palette:palette:1.0.0'

    //Welcome Activity
    implementation 'com.github.AppIntro:AppIntro:6.1.0'

    //Charts
    implementation 'com.github.PhilJay:MPAndroidChart:v3.0.3'

    //TableView
    implementation 'com.evrencoskun.library:tableview:0.8.8'

    //Anko Commons Library for easier development
    implementation "org.jetbrains.anko:anko-commons:$anko_version"

    //Search Dialog
    implementation 'com.github.mirrajabi:search-dialog:1.2.4'

    //FAB Button Speed Dial
    implementation 'com.leinardi.android:speed-dial:3.2.0'

    //WorkManager
    implementation('androidx.work:work-runtime-ktx:2.0.1') {
        exclude group: 'com.google.guava', module: 'listenablefuture'
    }

    //PagingList
    implementation 'androidx.paging:paging-runtime:2.1.0'

    //Calendar
    implementation 'com.github.prolificinteractive:material-calendarview:2.0.1'

    //Image Compressing
    implementation 'id.zelory:compressor:3.0.1'

    //New Places: Old one is deprecated
    implementation 'com.google.android.libraries.places:places:2.4.0'

    // Koin for Android
    implementation 'org.koin:koin-android:2.0.0-rc-2'
    implementation 'org.koin:koin-android-viewmodel:2.0.0-rc-2'

    // KTX
    implementation 'androidx.core:core-ktx:1.3.2'

    // Rx
    implementation 'io.reactivex.rxjava2:rxjava:2.2.4'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

    // Moshi
    implementation 'com.squareup.moshi:moshi:1.8.0'
    kapt 'com.squareup.moshi:moshi-kotlin-codegen:1.8.0'

    // Retrofit
    implementation 'com.squareup.retrofit2:retrofit:2.5.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
    implementation 'com.squareup.retrofit2:converter-moshi:2.5.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.14.1'

    // Picasso
    implementation 'com.squareup.picasso:picasso:2.71828'


    //SQLCipher
    implementation "net.zetetic:android-database-sqlcipher:4.4.0@aar"
....

}
repositories {
    mavenCentral()
}

// For Firebase
apply plugin: 'com.google.gms.google-services'  // Google Play services Gradle plugin

I tried to update to the current newest version of each, although this problem exists in not so new versions

classpath 'com.android.tools.build:gradle:7.0.2'
classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20'

In order to make this change I did the following:

  1. Update Java jdk to 11
  2. Replace kotlin-android-extensions with 'kotlin-parcelize' and viewBinding = true
  3. Remove androidExtensions: experimental=true
  4. Replace the parcelize import with kotlinx.parcelize.Parcelize

Even all this, I still have this error

Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction
   > java.lang.reflect.InvocationTargetException (no error message)

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

There are messages below app:kaptDebugKotlin but they are warnings of multiple constructors of non @Entity classes which shouldn't provoke the crash

This is really frustrating cause I don't know what else to do or how to get more information (I also did a run with --info and I only get the same output from kapt)

Thank you in advance for your time and help

UPDATE

Here is my top gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    //ext.kotlin_version = '1.4.10'
    //Working version
    ext.kotlin_version = '1.3.50'
    //Latest version
    //ext.kotlin_version = '1.5.20'

    //ext.kotlin_version = '1.3.41'

    repositories {
        mavenCentral()
        google()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
        google()
        //jcenter()
    }
    dependencies {
        // working version, if change modify distributionUrl in gradle-wrapper.properties
        classpath 'com.android.tools.build:gradle:4.0.2'
        // to upgrade
        //classpath 'com.android.tools.build:gradle:7.0.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.10'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }


}



allprojects {
    repositories {
        google()
        mavenCentral()
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'

        }
        //De MaterialChipsInput y Search Dialog
        maven {
            url "https://jitpack.io"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

ext{
    archLifecycleVersion = '1.1.1'
    anko_version='0.10.5'
    support_version = '28.0.0'
    playServices_version = '16.0.0'
}

Quick update, when I try to upgrade only the room version to 2.3.0 the error occurs:

[kapt] An exception occurred: java.lang.NoSuchMethodError: kotlin.jvm.internal.FunctionReferenceImpl.<init>(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
    at androidx.room.log.RLog$CollectingMessager$writeTo$printMessage$1.<init>(RLog.kt)
    at androidx.room.log.RLog$CollectingMessager.writeTo(RLog.kt:92)
    at androidx.room.solver.TypeAdapterStore.findRowAdapter(TypeAdapterStore.kt:520)
    at androidx.room.solver.TypeAdapterStore.findQueryResultAdapter(TypeAdapterStore.kt:459)
    at androidx.room.solver.binderprovider.InstantQueryResultBinderProvider.provide(InstantQueryResultBinderProvider.kt:29)
    at androidx.room.solver.TypeAdapterStore.findQueryResultBinder(TypeAdapterStore.kt:391)
    at androidx.room.processor.DefaultMethodProcessorDelegate.findResultBinder(MethodProcessorDelegate.kt:140)
    at androidx.room.processor.InternalQueryProcessor.getQueryMethod(QueryMethodProcessor.kt:204)
    at androidx.room.processor.InternalQueryProcessor.processQuery(QueryMethodProcessor.kt:135)
    at androidx.room.processor.QueryMethodProcessor$process$1.invoke(QueryMethodProcessor.kt:67)
    at androidx.room.processor.QueryMethodProcessor$process$1.invoke(QueryMethodProcessor.kt:37)
    at androidx.room.processor.Context.collectLogs(Context.kt:133)
    at androidx.room.processor.QueryMethodProcessor.process(QueryMethodProcessor.kt:61)
    at androidx.room.processor.DaoProcessor.process(DaoProcessor.kt:99)
    at androidx.room.processor.DatabaseProcessor.doProcess(DatabaseProcessor.kt:100)
    at androidx.room.processor.DatabaseProcessor.process(DatabaseProcessor.kt:51)
    at androidx.room.DatabaseProcessingStep.process(DatabaseProcessingStep.kt:47)
    at androidx.room.compiler.processing.JavacProcessingStepDelegate.process(XProcessingStep.kt:111)
    at com.google.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:330)
    at com.google.auto.common.BasicAnnotationProcessor.process(BasicAnnotationProcessor.java:181)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt)
    at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:147)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068)
    at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:79)
    at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:35)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:230)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:188)
    at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:99)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:96)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:106)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:81)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:555)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:82)
    at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:107)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:546)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:177)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:164)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:54)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:84)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:42)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:104)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1558)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$256(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Any idea why and is it related?

SOLUTION: In case anyone is searching for something similar, I finally redid the project and the problem was related with moshi kapt. I update the library to 1.12.0 and everything works

3 Answers

In my case, I have faced the same issue while I have upgraded "kotlin-gradle-plugin: from 1.5.31 to 1.6.10".

I have solved this issue by Upgrading Gradle Version to the latest version by following official docs.

In android studio got to File>Project Structure>Project>Gradle Version here select the latest version of Gradel.

I think, This happens when we update "kotlin-gradle-plugin" and the other dependencies are not the latest version.

Also, Check your JDK version you can follow official docs.

Upgrade room to 2.4.0-beta02 will fix your problem. Because it fix mine.

We've added a new TypeConverter analyzer that takes nullability information in types into account. As this information is only available in KSP, it is turned on by default only in KSP. If it causes any issues, you can turn it off by passing room.useNullAwareTypeAnalysis=false to the annotation processor. If that happens, please a file bug as this flag will be removed in the future. With this new TypeConverter analyzer, it is suggested to only provide non-null receiving TypeConverters as the new analyzer has the ability to wrap them with a null check. Note that this has no impact for users using KAPT or Java as the annotation processors (unlike KSP), don't have nullability information in types. (Ia88f9, b/193437407)

https://developer.android.com/jetpack/androidx/releases/room#2.4.0-beta02

In your dependencies below the //Room comment add the following :

implementation "androidx.room:room-runtime:$room_version"
kapt "androidx.room:room-compiler:$room_version"
implementation "androidx.room:room-ktx:$room_version"

and make sure you are using latest room_version = [2.3.0]

Related