Kotlin 1.9.0搭配Hilt 2.44报元数据版本不兼容问题求助
Kotlin 1.9.0 集成 Hilt 2.44 相关问题解答
问题1:Kotlin 1.9.0 搭配 Hilt 2.44 触发版本不兼容错误的原因?
运行时触发的错误日志如下:
Unsupported metadata version. Check that your Kotlin version is >= 1.0: java.lang.IllegalStateException: Unsupported metadata version. Check that your Kotlin version is >= 1.0 at dagger.hilt.processor.internal.kotlin.KotlinMetadata.metadataOf(KotlinMetadata.java:200) at dagger.hilt.processor.internal.kotlin.KotlinMetadata.from(KotlinMetadata.java:182) at java.base/java.util.HashMap.computeIfAbsent(Unknown Source) at dagger.hilt.processor.internal.kotlin.KotlinMetadataFactory.create(KotlinMetadataFactory.java:54) at dagger.hilt.processor.internal.kotlin.KotlinMetadataUtil.containsConstructorWithDefaultParam(KotlinMetadataUtil.java:176) at dagger.hilt.android.processor.internal.androidentrypoint.AndroidEntryPointMetadata.of(AndroidEntryPointMetadata.java:257) at dagger.hilt.android.processor.internal.androidentrypoint.AndroidEntryPointMetadata.of(AndroidEntryPointMetadata.java:184) at dagger.hilt.android.processor.internal.androidentrypoint.AndroidEntryPointProcessor.processEach(AndroidEntryPointProcessor.java:57) 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:197) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(Unknown Source) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(Unknown Source) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(Unknown Source) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(Unknown Source) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(Unknown Source) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:90) at org.jetbrains.kotlin.kapt3.base.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:31) at org.jetbrains.kotlin.kapt3.base.Kapt.kapt(Kapt.kt:47) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.jetbrains.kotlin.gradle.internal.KaptExecution.run(KaptWithoutKotlincTask.kt:311) at org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction.execute(KaptWithoutKotlincTask.kt:257) at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:63) at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:66) at org.gradle.workers.internal.NoIsolationWorkerFactory$1$1.create(NoIsolationWorkerFactory.java:62) at org.gradle.internal.classloader.ClassLoaderUtils.executeInClassloader(ClassLoaderUtils.java:100) at org.gradle.workers.internal.NoIsolationWorkerFactory$1.lambda$execute$0(NoIsolationWorkerFactory.java:62) at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:44) at org.gradle.workers.internal.AbstractWorker$1.call(AbstractWorker.java:41) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:204) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:199) [Hilt]
原因解析
核心问题是Hilt 2.44 的注解处理器不兼容 Kotlin 1.9.0 生成的元数据版本:
- Kotlin 大版本更新(如 1.7.x → 1.9.x)会调整字节码中的元数据格式,用于记录 Kotlin 特性相关的信息;
- Hilt 2.44 发布于 Kotlin 1.9.0 之前,其处理器的元数据解析逻辑仅支持到更早的 Kotlin 版本(如 1.7.x 系列);
- 当使用 Kotlin 1.9.0 编译代码时,生成的元数据超出了 Hilt 2.44 的识别范围,因此抛出「Unsupported metadata version」异常。切换到 Kotlin 1.7.21 时,生成的元数据在 Hilt 2.44 的兼容范围内,所以可以正常运行。
问题2:Kotlin 1.9.0 环境下,替换 kapt 为 annotationProcessor 即可正常运行的原因?
原依赖配置:
implementation("com.google.dagger:hilt-android:2.44") kapt("com.google.dagger:hilt-android-compiler:2.44")
原因解析
两者的核心差异在于对 Kotlin 元数据的处理逻辑:
kapt:是 Kotlin 官方提供的注解处理器工具,会先将 Kotlin 代码转换为 Java 存根(Stub),同时会读取 Kotlin 生成的元数据并传递给注解处理器。正因为它会处理 Kotlin 元数据,所以遇到 Hilt 2.44 不支持的 1.9.0 元数据时就会触发错误;annotationProcessor:是 Gradle 原生的注解处理器工具,仅处理 Java 代码的注解,不会读取或处理 Kotlin 生成的元数据。替换后,Hilt 处理器只会执行 Java 层面的注解解析逻辑,跳过了 Kotlin 元数据的读取步骤,从而规避了版本不兼容问题。
注意:这只是临时规避方案,会丢失 Hilt 对 Kotlin 特性的支持(如默认参数注入、Kotlin 类构造器优化等),长期建议升级 Hilt 到支持 Kotlin 1.9.0 的版本(如 Hilt 2.48 及以上)。
内容的提问来源于stack exchange,提问作者kite
相关产品推荐
相关产品推荐

