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