You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:44:54