You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

添加Hilt后出现类加载错误,求Room、Hilt(适配KSP)依赖配置最佳方案及错误解决

添加Hilt后出现类加载错误,求Room、Hilt(适配KSP)依赖配置最佳方案及错误解决

先解决你遇到的ScopedArtifact$POST_COMPILATION_CLASSES类找不到错误

这个错误的核心是版本不兼容,你的配置里有两个致命问题:

  1. AGP版本过于超前:你用的8.13.2是未正式发布的预览版,Hilt 2.59还没适配这么高的AGP版本,导致无法识别AGP内部的新API类。
  2. 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
}

额外注意事项(避免后续踩坑)

  1. KSP版本必须和Kotlin版本严格绑定:每次升级Kotlin,必须同步更新KSP版本,格式永远是Kotlin版本-KSP核心版本,别自己乱改版本号。
  2. 优先用稳定版,别盲目追新:预览版AGP/Kotlin/Compose虽然功能新,但第三方库(比如Hilt)往往需要1-2个月的适配时间,容易出现这类内部类找不到的问题。
  3. 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换成这个类的全路径。
  4. 禁止混合kapt和ksp:Room和Hilt的处理器必须全用ksp,不能一部分用kapt一部分用ksp,会导致编译冲突。

验证配置的步骤

  1. 执行File -> Sync Project with Gradle Files,确保没有同步错误。
  2. 清理并重建项目:Build -> Clean ProjectBuild -> Rebuild Project
  3. 运行App,若能正常编译启动,说明配置完全正确。

火山引擎 最新活动