如何正确实现Hilt?解决@AndroidEntryPoint与插件重复请求错误
Hilt集成两类错误的原因与解决方法
错误1:[ksp] [Hilt] Expected @AndroidEntryPoint to have a value. Did you forget to apply the Gradle Plugin? (com.google.dagger.hilt.android)
原因
Hilt的注解处理器依赖Gradle插件生成必要的辅助代码,当前App级build.gradle.kts中未启用Hilt插件,导致@AndroidEntryPoint注解无法被正确解析,注解处理器找不到插件生成的配套代码,从而抛出该错误。另外Compose项目中kotlin-android插件是kotlin-compose的依赖,当前也被注释掉,会间接影响插件正常工作。
解决方法
在App级build.gradle.kts的plugins块中启用Hilt插件,同时启用kotlin-android插件:
- 取消
alias(libs.plugins.kotlin.android)的注释 - 取消
alias(libs.plugins.hilt)的注释
错误2:Plugin with id 'com.google.dagger.hilt.android' was already requested at line 2
原因
该错误是重复请求同一插件导致的:要么是在App级配置中同时通过别名和直接插件ID引用了Hilt插件,要么是项目其他模块重复声明了该插件。结合你的配置来看,大概率是尝试手动添加com.google.dagger.hilt.android插件ID时,和已通过alias(libs.plugins.hilt)声明的插件冲突。
解决方法
保持插件引用方式一致,统一使用alias(libs.plugins.hilt)的方式引用Hilt插件,避免同时用别名和直接ID声明同一插件。
修改后的完整配置文件
App级build.gradle.kts
import com.android.aaptcompiler.compileResource plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) // 启用kotlin-android,为kotlin-compose提供依赖 alias(libs.plugins.kotlin.compose) alias(libs.plugins.ksp) alias(libs.plugins.hilt) // 启用Hilt插件 } android { namespace = "com.slatertechnologies.changebackgroundcolor" compileSdk { version = release(36) { minorApiLevel = 1 } } defaultConfig { applicationId = "com.slatertechnologies.changebackgroundcolor" minSdk = 24 targetSdk = 36 versionCode = 1 versionName = "1.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = false proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } buildFeatures { compose = true } } dependencies { implementation(platform(libs.androidx.compose.bom)) implementation(libs.androidx.activity.compose) implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.graphics) implementation(libs.androidx.compose.ui.tooling.preview) implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) testImplementation(libs.junit) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.compose.ui.test.junit4) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(libs.androidx.junit) debugImplementation(libs.androidx.compose.ui.test.manifest) debugImplementation(libs.androidx.compose.ui.tooling) // Room ksp(libs.androidx.room.compiler) implementation(libs.androidx.room.runtime) // Hilt ksp(libs.hilt.compiler) implementation(libs.hilt.android) }
额外配置提醒
别忘了给你的Application类添加@HiltAndroidApp注解,这是Hilt的核心入口:
@HiltAndroidApp class MyApplication : Application() { // 自定义逻辑 }
同时在AndroidManifest.xml中指定该Application类。
内容的提问来源于stack exchange,提问作者Benedikt Schlüter
相关产品推荐
相关产品推荐

