使用Compose、Hilt与Room构建Android应用时遭遇构建失败求助
问题分析与解决方案
从错误日志dagger.spi.BindingGraphPlugin: dagger.hilt.android.processor.internal.viewmodel.ViewModelValidationPlugin not a subtype可以判断,核心问题是Hilt依赖版本不统一,同时项目中还存在Room依赖重复/版本不一致、KSP版本与Kotlin版本不兼容的问题,这些共同导致了kapt编译失败。以下是具体修复步骤:
1. 统一Hilt所有依赖版本
你的Hilt依赖中,hilt-android-compiler用了2.44,其他Hilt相关依赖都是2.48,版本不匹配会触发注解处理器冲突。需要:
- 移除版本不一致的
kapt ("com.google.dagger:hilt-android-compiler:2.44") - 确保所有Hilt依赖(插件、implementation、kapt等)版本完全一致
2. 清理Room依赖,统一版本并选择单一注解处理方式
Room依赖存在重复引入、版本不一致的问题:
- 重复添加了两次
ksp("androidx.room:room-compiler:$room_version") - 同时使用
annotationProcessor和ksp处理Room注解,二者选其一即可(推荐KSP) room-ktx同时引入2.5.2和2.3.0,统一为2.5.2
3. 更新KSP版本以匹配Kotlin版本
项目Kotlin版本是1.8.10,而KSP版本是1.5.30-1.0.0,版本严重不兼容。KSP版本必须与Kotlin版本严格对应,Kotlin 1.8.10对应的KSP版本为1.8.10-1.0.11。
修改后的完整Gradle配置
模块级build.gradle(app模块)
plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("com.google.devtools.ksp") version "1.8.10-1.0.11" // 匹配Kotlin版本的KSP id("kotlin-kapt") id("dagger.hilt.android.plugin") // 添加Hilt插件 } android { namespace = "com.zenworklauncher" compileSdk = 33 defaultConfig { applicationId = "com.zenworklauncher" minSdk = 31 targetSdk = 33 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { useSupportLibrary = true } javaCompileOptions { annotationProcessorOptions { arguments += mapOf( "room.schemaLocation" to "$projectDir/schemas", "room.incremental" to "true" ) } } } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } kotlinOptions { jvmTarget = "17" // 与Java版本保持一致 } buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.4.3" } packaging { resources { excludes += "/META-INF/{AL2.0,LGPL2.1}" } } } dependencies { implementation("androidx.core:core-ktx:1.9.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") implementation("androidx.activity:activity-compose:1.7.2") implementation(platform("androidx.compose:compose-bom:2023.03.00")) implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-graphics") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.material3:material3") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00")) androidTestImplementation("androidx.compose.ui:ui-test-junit4") debugImplementation("androidx.compose.ui:ui-tooling") debugImplementation("androidx.compose.ui:ui-test-manifest") // Room - 统一版本,使用KSP处理注解 val room_version = "2.5.2" implementation("androidx.room:room-runtime:$room_version") implementation("androidx.room:room-ktx:$room_version") ksp("androidx.room:room-compiler:$room_version") // HILT - 统一所有版本为2.48 implementation ("com.google.dagger:hilt-android:2.48") kapt ("com.google.dagger:hilt-compiler:2.48") // For instrumentation tests androidTestImplementation ("com.google.dagger:hilt-android-testing:2.48") kaptAndroidTest ("com.google.dagger:hilt-compiler:2.48") // For local unit tests testImplementation ("com.google.dagger:hilt-android-testing:2.48") kaptTest ("com.google.dagger:hilt-compiler:2.48") }
项目级build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { id("com.android.application") version "8.1.1" apply false id("org.jetbrains.kotlin.android") version "1.8.10" apply false id("com.google.dagger.hilt.android") version "2.48" apply false }
额外操作
执行File -> Invalidate Caches... -> Invalidate and Restart清理缓存后,重新构建项目即可。
内容的提问来源于stack exchange,提问作者Dhruv Bansal
相关产品推荐
相关产品推荐

