添加Hilt后出现类加载错误,求Room、Hilt(适配KSP)依赖配置最佳方案及错误解决
添加Hilt后出现类加载错误,求Room、Hilt(适配KSP)依赖配置最佳方案及错误解决
先解决你遇到的ScopedArtifact$POST_COMPILATION_CLASSES类找不到错误
这个错误的核心是版本不兼容,你的配置里有两个致命问题:
- AGP版本过于超前:你用的
8.13.2是未正式发布的预览版,Hilt 2.59还没适配这么高的AGP版本,导致无法识别AGP内部的新API类。 - KSP版本配置错误:KSP的版本必须和Kotlin版本严格绑定(格式为
Kotlin版本-KSP核心版本),你直接写2.3.0完全不符合规范,导致KSP无法正常对接Kotlin编译器。
给你一套经过验证的稳定兼容配置(适配KSP)
我整理了当前(2025年)官方确认兼容的版本组合,直接替换你的配置即可解决问题:
第一步:修正libs.versions.toml(版本目录)
把你的版本文件替换成下面的内容,所有版本都是稳定且互斥兼容的:
[versions] # 核心工具链(稳定兼容组合) agp = "8.6.1" # 最新稳定版AGP kotlin = "2.0.20" # 稳定版Kotlin 2.0,适配Room/Hilt ksp = "2.0.20-1.0.25" # KSP版本必须与Kotlin版本严格匹配,格式:Kotlin版本-KSP核心版本 # 依赖库版本 coreKtx = "1.17.0" junit = "4.13.2" junitVersion = "1.3.0" espressoCore = "3.7.0" lifecycleRuntimeKtx = "2.10.0" activityCompose = "1.12.2" composeBom = "2024.10.00" # 稳定版Compose BOM,避免用预览版 lifecycle = "2.10.0" coroutines = "1.10.2" room = "2.8.4" # 官方说明支持Kotlin 2.0 + KSP hilt = "2.59" # 支持Kotlin 2.0和AGP 8.x hilt-ext = "1.3.0" work = "2.11.0" [libraries] # --- Lifecycle / ViewModel --- lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycle" } lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "lifecycle" } # --- Coroutines --- coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "coroutines" } # --- Room --- room-runtime = { group = "androidx.room", name = "room-runtime", version.ref = "room" } room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "room" } room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room" } # --- Hilt --- hilt-android = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-compiler = { group = "com.google.dagger", name = "hilt-android-compiler", version.ref = "hilt" } # --- Hilt Extensions --- hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hilt-ext" } hilt-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "hilt-ext" } hilt-ext-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hilt-ext" } # --- WorkManager --- work-runtime = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "work" } # --- Core Android --- androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" } # --- Compose --- androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" } androidx-compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } androidx-compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } # --- Testing --- junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
第二步:修正模块级build.gradle.kts(app模块)
你的现有配置大部分正确,补充Hilt的必要配置块,并确保所有处理器用KSP:
import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.hilt.android) alias(libs.plugins.ksp) } android { namespace = "com.example.trackmypregnancy" compileSdk = 36 defaultConfig { applicationId = "com.example.trackmypregnancy" minSdk = 24 targetSdk = 36 versionCode = 1 versionName = "1.0" // 若使用Hilt测试,需替换为自定义TestRunner(见下方注意事项) testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_17) freeCompilerArgs.add("-Xcontext-receivers") } } buildFeatures { compose = true } } // Hilt必要配置块 hilt { enableAggregatingTask = true } dependencies { // 基础Android依赖 implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) // Compose依赖(通过BOM统一管理版本) implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.graphics) implementation(libs.androidx.compose.ui.tooling.preview) implementation(libs.androidx.compose.material3) // 测试依赖 testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.compose.ui.test.junit4) debugImplementation(libs.androidx.compose.ui.tooling) debugImplementation(libs.androidx.compose.ui.test.manifest) // ViewModel + Lifecycle implementation(libs.lifecycle.viewmodel) implementation(libs.lifecycle.runtime.compose) // Coroutines implementation(libs.coroutines.android) // Room(完全用KSP替代kapt) implementation(libs.room.runtime) implementation(libs.room.ktx) ksp(libs.room.compiler) // Hilt(完全用KSP替代kapt) implementation(libs.hilt.android) ksp(libs.hilt.compiler) implementation(libs.hilt.navigation.compose) implementation(libs.hilt.work) ksp(libs.hilt.ext.compiler) // WorkManager implementation(libs.work.runtime) }
第三步:修正项目级build.gradle.kts
确保只声明插件不应用:
// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false alias(libs.plugins.hilt.android) apply false alias(libs.plugins.ksp) apply false }
额外注意事项(避免后续踩坑)
- KSP版本必须和Kotlin版本严格绑定:每次升级Kotlin,必须同步更新KSP版本,格式永远是
Kotlin版本-KSP核心版本,别自己乱改版本号。 - 优先用稳定版,别盲目追新:预览版AGP/Kotlin/Compose虽然功能新,但第三方库(比如Hilt)往往需要1-2个月的适配时间,容易出现这类内部类找不到的问题。
- Hilt测试配置:如果要写Instrumented Test,需创建自定义TestRunner类:
然后在package com.example.trackmypregnancy import androidx.test.runner.AndroidJUnitRunner import dagger.hilt.android.testing.HiltTestRunner @HiltTestRunner class HiltTestRunner : AndroidJUnitRunner()defaultConfig里把testInstrumentationRunner换成这个类的全路径。 - 禁止混合kapt和ksp:Room和Hilt的处理器必须全用
ksp,不能一部分用kapt一部分用ksp,会导致编译冲突。
验证配置的步骤
- 执行
File -> Sync Project with Gradle Files,确保没有同步错误。 - 清理并重建项目:
Build -> Clean Project→Build -> Rebuild Project。 - 运行App,若能正常编译启动,说明配置完全正确。




