0

Background

I wanted to update all of my dependencies before continuing with a new feature for my application. This is always a fun time. I hate coming here with posts like: "this code doesn't work" but here I am.

Problem

I narrowed the issues down to a change in my Gradle file. The app works with:

build.gradle

buildscript {
    ext {
       ...
          compose_version = '1.1.0-alpha02'
          kotlin_version = '1.5.21'
          hilt_version = '2.38.1'
       ...

build.gradle.app

...
dependencies {
    ...
    // hilt
    implementation "com.google.dagger:hilt-android:$hilt_version"
    kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
    implementation 'androidx.hilt:hilt-navigation-compose:1.0.0-alpha03'

    // For Robolectric tests.
    testImplementation "com.google.dagger:hilt-android-testing:2.38.1"
    // ...with Kotlin.
    kaptTest "com.google.dagger:hilt-android-compiler:2.38.1"
    implementation("androidx.hilt:hilt-work:1.0.0")
    kapt("androidx.hilt:hilt-compiler:1.0.0")

    // Compose UI tests
    // Test rules and transitive dependencies:
    androidTestImplementation("androidx.compose.ui:ui-test-junit4:$compose_version")
    // Needed for createComposeRule, but not createAndroidComposeRule:
    debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")

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

But then I updated Kotlin and Compose (because the earlier version of compose is incompatible with Kotlin 1.6.0). I received some weird errors which I solved by converting kapt(...) dependencies to annotationProcessor(...) dependencies:

build.gradle

buildscript {
    ext {
       ...
          compose_version = '1.1.0-rc01'
          kotlin_version = '1.6.0'
          hilt_version = '2.38.1'
       ...

build.gradle.app

...
dependencies {
    ...
    // hilt
    implementation "com.google.dagger:hilt-android:$hilt_version"
    annotationProcessor "com.google.dagger:hilt-android-compiler:$hilt_version"
    implementation 'androidx.hilt:hilt-navigation-compose:1.0.0-alpha03'

    // For Robolectric tests.
    testImplementation "com.google.dagger:hilt-android-testing:2.38.1"
    // ...with Kotlin.
    kaptTest "com.google.dagger:hilt-android-compiler:2.38.1"
    implementation("androidx.hilt:hilt-work:1.0.0")
    annotationProcessor("androidx.hilt:hilt-compiler:1.0.0")

    // Compose UI tests
    // Test rules and transitive dependencies:
    androidTestImplementation("androidx.compose.ui:ui-test-junit4:$compose_version")
    // Needed for createComposeRule, but not createAndroidComposeRule:
    debugImplementation("androidx.compose.ui:ui-test-manifest:$compose_version")

    implementation("androidx.room:room-runtime:$room_version")
    annotationProcessor "androidx.room:room-compiler:$room_version"
    annotationProcessor("androidx.room:room-compiler:$room_version")
    implementation("androidx.room:room-ktx:$room_version")
    ...

and then I began getting this error. Which makes me think that there is some deeper issue with Hilt. I tried multiple (newer) Hilt versions as well including the newest 2.40.5.

2021-12-29 22:33:07.479 15168-15168/com.XXX.networkdatausage E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.XXX.networkdatausage, PID: 15168
java.lang.RuntimeException: Unable to instantiate application com.XXX.networkdatausage.NetworkUsageApplication: java.lang.ClassNotFoundException: Didn't find class "com.XXX.networkdatausage.NetworkUsageApplication" on path: DexPathList[[zip file "/data/app/com.XXX.networkdatausage-03CzYbinIiu2DMSufPHnog==/base.apk"],nativeLibraryDirectories=[/data/app/com.XXX.networkdatausage-03CzYbinIiu2DMSufPHnog==/lib/arm, /system/lib, /system/vendor/lib]]
    at android.app.LoadedApk.makeApplication(LoadedApk.java:1138)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6298)
    at android.app.ActivityThread.access$1200(ActivityThread.java:242)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7179)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.XXX.NetworkUsageApplication" on path: DexPathList[[zip file "/data/app/com.XXX.networkdatausage-03CzYbinIiu2DMSufPHnog==/base.apk"],nativeLibraryDirectories=[/data/app/com.XXX.networkdatausage-03CzYbinIiu2DMSufPHnog==/lib/arm, /system/lib, /system/vendor/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at android.app.AppComponentFactory.instantiateApplication(AppComponentFactory.java:50)
    at androidx.core.app.CoreComponentFactory.instantiateApplication(CoreComponentFactory.java:52)
    at android.app.Instrumentation.newApplication(Instrumentation.java:1124)
    at android.app.LoadedApk.makeApplication(LoadedApk.java:1130)
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6298) 
    at android.app.ActivityThread.access$1200(ActivityThread.java:242) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809) 
    at android.os.Handler.dispatchMessage(Handler.java:106) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7179) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975) 
    Suppressed: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/XXX/networkdatausage/Hilt_NetworkUsageApplication;
    at java.lang.VMClassLoader.findLoadedClass(Native Method)
    at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:363)
            ... 14 more
 Caused by: java.lang.ClassNotFoundException: Didn't find class "com.XXX.networkdatausage.Hilt_NetworkUsageApplication" on path: DexPathList[[zip file "/data/app/com.XXX.networkdatausage-03CzYbinIiu2DMSufPHnog==/base.apk"],nativeLibraryDirectories=[/data/app/com.XXX.networkdatausage-03CzYbinIiu2DMSufPHnog==/lib/arm, /system/lib, /system/vendor/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
            ... 17 more

Android Studio Version

Android Studio Arctic Fox | 2020.3.1 Patch 4

Question

What do I need to do to fix this? If you would like to see more of my Gradle files please let me know. Should I post this question somewhere else?

Edit

When I switch

annotationProcessor "com.google.dagger:hilt-android-compiler:$hilt_version"

to

kapt "com.google.dagger:hilt-android-compiler:$hilt_version"

I get this error (I couldn't include entire message so I just included the last two "caused by"):

Caused by: com.sun.tools.javac.processing.AnnotationProcessingError: java.lang.NoSuchMethodError: kotlinx.metadata.jvm.KotlinClassHeader.<init>(Ljava/lang/Integer;[I[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)V
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:992)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:896)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1222)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1335)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258)
    ... 34 more
Caused by: java.lang.NoSuchMethodError: kotlinx.metadata.jvm.KotlinClassHeader.<init>(Ljava/lang/Integer;[I[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Integer;)V
    at dagger.internal.codegen.kotlin.KotlinMetadata.metadataOf(KotlinMetadata.java:202)
    at dagger.internal.codegen.kotlin.KotlinMetadata.from(KotlinMetadata.java:187)
    at dagger.internal.codegen.kotlin.KotlinMetadataFactory.create(KotlinMetadataFactory.java:56)
    at dagger.internal.codegen.kotlin.KotlinMetadataUtil.isObjectClass(KotlinMetadataUtil.java:91)
    at dagger.internal.codegen.kotlin.KotlinMetadataUtil.isObjectOrCompanionObjectClass(KotlinMetadataUtil.java:108)
    at dagger.hilt.processor.internal.Processors.requiresModuleInstance(Processors.java:931)
    at dagger.hilt.processor.internal.aggregateddeps.AggregatedDepsProcessor.processModule(AggregatedDepsProcessor.java:169)
    at dagger.hilt.processor.internal.aggregateddeps.AggregatedDepsProcessor.processEach(AggregatedDepsProcessor.java:120)
    at dagger.hilt.processor.internal.BaseProcessor.process(BaseProcessor.java:195)
    at org.jetbrains.kotlin.kapt3.base.incremental.IncrementalProcessor.process(incrementalProcessors.kt:90)
    at org.jetbrains.kotlin.kapt3.base.ProcessorWrapper.process(annotationProcessing.kt:188)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:980)
    ... 38 more
Lucas Kivi
  • 233
  • 2
  • 9
  • You are missing `kapt` for hilt compiler . i think you have to keep it and try to look into other errors you are getting . [Here](https://stackoverflow.com/questions/50027741/android-project-with-java-and-kotlin-files-kapt-or-annotationprocessor) is a thread about this. looks like some version conflict to me . – ADM Dec 30 '21 at 07:37
  • I get the same "weird" errors I mentioned when I switch back to `kapt`. I will include the log in an edit above. – Lucas Kivi Dec 30 '21 at 15:53

1 Answers1

0

Solution

The issue was how I incorrectly handled the kapt errors after upgrading Kotlin.

I reverted all of my annotationProcessor(...) migrations back to kapt(...) and here was the issue:

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(11))
    }
}

was supposed to be:

java {
    sourceCompatibility = JavaVersion.VERSION_11
    targetCompatibility = JavaVersion.VERSION_11
}
Lucas Kivi
  • 233
  • 2
  • 9