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

启用KSP后,Android Instrumentation测试中Hilt是否仍需kaptAndroidTest?

Hilt Instrumentation测试与KSP适配问题

我正在开发一个使用Hilt进行依赖注入的Android项目,近期已启用KSP(Kotlin Symbol Processing)替代KAPT(Kotlin Annotation Processing Tool),并为常规应用代码和Instrumentation测试配置了KSP。

当前Android模块build.gradle配置

plugins {
    alias(libs.plugins.ksp)
    alias(libs.plugins.hilt)
   
}

android {
    defaultConfig {
       ...
    }

    buildTypes {
        debug {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
        release {
            isMinifyEnabled = true
            isShrinkResources = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    buildFeatures {
        compose = true
        buildConfig = true
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.4"
    }
    experimentalProperties["android.experimental.enableScreenshotTest"] = true
    packaging {
        resources.excludes.addAll(
            listOf(
                "META-INF/LICENSE.md",
                "META-INF/LICENSE-notice.md",
                "/META-INF/{AL2.0,LGPL2.1}"
            )
        )
    }
    testOptions{
        unitTests{
            isIncludeAndroidResources = true
        }
    }
}

dependencies {
    //Hilt
    implementation(libs.hilt.android.core)
    ksp(libs.hilt.compiler)
    implementation(libs.hilt.compose.viewmodel)
    
    //HiltTesting
    androidTestImplementation(libs.androidx.hilt.testing)
    kspAndroidTest(libs.hilt.compiler.test)
}

libs.version.toml依赖配置

[versions]
agp = "8.8.0"
kotlin = "2.1.0"
...
hilt = "2.51.1"
ksp = "2.1.0-1.0.29"
hiltViewModel = "1.2.0"

[libraries]
...

#Hilt
hilt-compose-viewmodel = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hiltViewModel" }
hilt-android-core = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" }
..
androidx-hilt-testing = { group = "com.google.dagger",name ="hilt-android-testing",version.ref = "hilt"}
hilt-compiler-test ={group= "com.google.dagger",name="hilt-android-compiler",version.ref="hilt"}


[plugins]
...
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }

但查阅官方文档时,发现文档中指出Instrumented测试需使用kaptAndroidTest:

dependencies {
    // For instrumented tests.
    androidTestImplementation("com.google.dagger:hilt-android-testing:2.51.1")
    // ...with Kotlin.
    kaptAndroidTest("com.google.dagger:hilt-android-compiler:2.51.1")
    // ...with Java.
    androidTestAnnotationProcessor("com.google.dagger:hilt-android-compiler:2.51.1")
}

我有以下疑问:

  1. Hilt的Android测试注解处理器是否仍依赖KAPT,还是我的配置存在缺失导致无法完全适配KSP?
  2. 若必须使用KAPT,这是否是Hilt在Android测试中支持KSP的已知限制?
  3. 我是否需要移除KSP,改用KAPT来实现Hilt和Instrumentation测试?

解答

  1. Hilt测试注解处理器已支持KSP,你的配置无缺失
    Hilt从2.48版本开始就支持用KSP替代KAPT处理Instrumentation测试代码。你当前配置中的kspAndroidTest(libs.hilt.compiler.test)是正确的,hilt-android-compiler和主代码依赖的hilt-compiler是同一个处理器,只是针对测试场景使用kspAndroidTest配置即可,无需依赖KAPT。官方文档的示例可能未及时更新到KSP版本。

  2. 无需强制使用KAPT,这不是已知限制
    Hilt对KSP的支持已经覆盖了所有测试场景(包括Instrumentation测试和单元测试),不存在必须使用KAPT的限制。如果遇到编译问题,优先检查KSP与Kotlin、Hilt版本的兼容性(你的Kotlin 2.1.0搭配KSP 2.1.0-1.0.29、Hilt 2.51.1是匹配的)。

  3. 不需要移除KSP,保持当前配置即可
    完全可以继续使用KSP适配Hilt和Instrumentation测试,无需回退到KAPT。只要确保Hilt版本在2.48及以上,且KSP版本与Kotlin版本严格对应,就能正常生成测试所需的Hilt代码。


内容的提问来源于stack exchange,提问作者Waheed Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:05:19