使用KSP、Dagger Hilt和Room时出现java.lang.NoSuchMethodError错误
错误信息
java.lang.NoSuchMethodError: 'kotlin.KotlinVersion com.google.devtools.ksp.processing.SymbolProcessorEnvironment.getKspVersion()'
at dagger.spi.internal.shaded.androidx.room.compiler.processing.ksp.KspStarTypeArgumentType.<init>(KspStarTypeArgumentType.kt:43)
at dagger.spi.internal.shaded.androidx.room.compiler.processing.ksp.KspProcessingEnv.wrap(KspProcessingEnv.kt:281)
...
环境与配置详情
- Android Gradle Plugin版本:8.1.2
- Kotlin版本:1.9.10
- KSP版本:1.9.10-1.0.13
- Hilt版本:2.52
- Android编译SDK版本:34
- minSdk:25
- targetSdk:34
- Java版本:19
- Compose Compiler版本:1.5.1
- Room版本:2.6.1
依赖配置
implementation("com.google.dagger:hilt-android:2.52") ksp("com.google.dagger:hilt-compiler:2.52")
插件配置
plugins { id("com.android.application") version "8.1.2" apply false id("org.jetbrains.kotlin.android") version "1.9.10" apply false id("com.google.devtools.ksp") version "1.9.10-1.0.13" apply false id("com.google.dagger.hilt.android") version "2.52" apply false }
问题成因
这个错误的核心是版本兼容性不匹配:
Hilt 2.52内部依赖的Room编译处理模块(dagger.spi.internal.shaded.androidx.room)基于较高版本的KSP开发,该模块调用了SymbolProcessorEnvironment.getKspVersion()方法,但你当前使用的KSP 1.9.10-1.0.13中并不存在这个方法——该方法是在KSP 1.0.14及以上版本才新增的。
解决方案
方案1:升级KSP到兼容版本
将KSP版本升级到与Kotlin 1.9.10匹配的1.9.10-1.0.14或更高版本:
- 修改项目根目录的插件配置:
plugins { id("com.google.devtools.ksp") version "1.9.10-1.0.14" apply false }
- 同步Gradle,执行
Clean Project后再Rebuild Project。
方案2:降级Hilt到兼容版本
如果暂时无法升级KSP,可将Hilt版本降级到2.51.1(该版本的内部模块不依赖上述新增方法):
- 修改依赖配置:
implementation("com.google.dagger:hilt-android:2.51.1") ksp("com.google.dagger:hilt-compiler:2.51.1")
- 修改插件版本:
plugins { id("com.google.dagger.hilt.android") version "2.51.1" apply false }
- 同步Gradle,清理并重建项目。
额外注意
- 确保Kotlin Android、KSP等插件版本与Kotlin语言版本严格匹配,避免跨版本兼容问题。
- 当前使用的Room 2.6.1与Kotlin 1.9.10兼容,无需调整Room版本。
内容的提问来源于stack exchange,提问作者Abhay Singh

