提问人:Alan Escamilla 提问时间:11/5/2023 更新时间:11/6/2023 访问量:474
Android Kotlin 项目中的 Dagger Hilt 和 KSP 问题:无法解析符号“注入”
Issues with Dagger Hilt and KSP in Android Kotlin Project: Cannot Resolve Symbol ‘Inject’
问:
我正在使用 Kotlin 开发一个 Android 项目,并使用 Dagger Hilt 进行依赖注入。最近,我尝试从 kapt 迁移到 KSP(Kotlin 符号处理)以生成代码,因为 kapt 现在处于“维护模式”。但是,我遇到了一个问题:KSP 未检测到 Dagger Hilt 注释(例如 @Inject、@Binds 和 @Module),并且我收到“无法解析符号”错误。
我正在使用“框架快速入门:将 Supabase 与 Android Kotlin 一起使用”文档测试与 Supabase 的连接,您可以在其中找到代码。我的build.gradle.kts(模块):
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android") version "1.9.20"
id ("com.google.relay") version "0.3.10"
kotlin("plugin.serialization") version "1.9.0"
id ("com.google.devtools.ksp") version "1.9.20-1.0.14"
}
android {
namespace = "xxxxxxxxxxx"
compileSdk = 34
defaultConfig {
applicationId = "xxxxxxxxxxxx"
minSdk = 24
targetSdk = 33
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_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
implementation("com.google.android.material:material:1.10.0")
implementation(platform("io.github.jan-tennert.supabase:bom:1.4.6-dev-1"))
implementation("io.github.jan-tennert.supabase:postgrest-kt")
implementation("io.github.jan-tennert.supabase:realtime-kt")
implementation("io.github.jan-tennert.supabase:storage-kt")
implementation("io.github.jan-tennert.supabase:functions-kt")
implementation("io.github.jan-tennert.supabase:gotrue-kt")
implementation("io.github.jan-tennert.supabase:compose-auth")
implementation("io.github.jan-tennert.supabase:compose-auth-ui")
implementation("io.ktor:ktor-client-cio:2.3.5")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
ksp("com.google.dagger:dagger-compiler:2.48.1") // Dagger compiler
ksp("com.google.dagger:hilt-compiler:2.48.1") // Hilt compiler
ksp("androidx.room:room-compiler:2.6.0")
ksp("androidx.hilt:hilt-compiler:1.1.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.5")
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
}
我的build.gradle.kts(proyect):
plugins {
id("com.android.application") version "8.1.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.20" apply false
id("com.google.devtools.ksp") version "1.9.20-1.0.14" apply false
}
我尝试清理和重建我的项目,验证我的依赖项版本,并查看我的 Dagger Hilt 和 KSP 设置。我还查看了官方 KSP 文档和 Google 文档,但我无法解决问题。我预计在迁移到 KSP 后,Dagger Hilt 注释将被正确检测到,并且代码将按预期工作。
答:
看起来您已将项目设置为使用 Kotlin 符号处理 (KSP) 和 Dagger Hilt 进行依赖项注入,但您遇到了 KSP 无法识别 Dagger Hilt 注释的问题。此问题可能与您的插件和依赖项的顺序有关。
首先,请确保在项目级 build.gradle.kts 文件中应用 Dagger Hilt 插件:
plugins {
id("com.android.application") version "8.1.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.20" apply false
id("com.google.devtools.ksp") version "1.9.20-1.0.14" apply false
id("dagger.hilt.android.plugin")
}
“dagger.hilt.android.plugin”应该在项目级别应用。
在应用模块的 build.gradle.kts 文件中,您应该添加 Hilt Android Gradle 插件,并为 Dagger Hilt 启用 KSP 处理,如下所示:
plugins {
// ...
id("dagger.hilt.android.plugin")
}
android {
// ...
}
dependencies {
// ...
// Use KSP for Dagger Hilt
ksp("com.google.dagger:hilt-compiler:2.48.1")
ksp("androidx.hilt:hilt-compiler:1.1.0")
// ...
}
确保应用了 Hilt 插件,并在应用模块的 build.gradle.kts 文件中设置了 KSP 依赖项。
进行这些更改后,清理并重新生成项目。如果您仍然遇到 KSP 无法识别 Dagger Hilt 注释的问题,请确保您拥有与 Dagger Hilt 和 KSP 兼容的相应 Kotlin 版本。
最后,仔细检查您的导入语句。确保在代码中正确导入 Dagger Hilt 注释,例如:
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
如果您已完成上述所有操作,但问题仍然存在,请提供任何其他错误消息或信息,以帮助更具体地识别问题。
评论
我终于解决了,我的错误是没有写
implementation 'com.google.dagger:hilt-android:2.48.1'
在 build.gradle.kts(模块)的依赖项中。我还对build.gradle文件进行了一些更改
现在它完全有效。
我离开我的build.gradle.kts(module):
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("com.google.dagger.hilt.android")
id ("com.google.devtools.ksp")
id ("com.google.relay") version "0.3.10"
kotlin("plugin.serialization") version "1.9.0"
}
android {
namespace = "com.xxxxxxx.xxxx"
compileSdk = 34
defaultConfig {
applicationId = "com.xxxxx.xxxxx"
minSdk = 24
targetSdk = 33
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary = true
}
}
buildTypes {
release {
isMinifyEnabled = false
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
}
composeOptions {
kotlinCompilerExtensionVersion = "1.5.0"
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
}
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
implementation("androidx.activity:activity-compose:1.8.0")
implementation(platform("androidx.compose:compose-bom:2023.10.01"))
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
implementation("com.google.dagger:hilt-android:2.48.1")
ksp("androidx.room:room-compiler:2.6.0")
ksp("com.google.dagger:dagger-compiler:2.48.1")
ksp("com.google.dagger:hilt-android-compiler:2.48.1")
implementation(platform("io.github.jan-tennert.supabase:bom:1.4.6-dev-1"))
implementation("io.github.jan-tennert.supabase:postgrest-kt")
implementation("io.github.jan-tennert.supabase:realtime-kt")
implementation("io.github.jan-tennert.supabase:storage-kt")
implementation("io.github.jan-tennert.supabase:functions-kt")
implementation("io.github.jan-tennert.supabase:gotrue-kt")
implementation("io.github.jan-tennert.supabase:compose-auth")
implementation("io.github.jan-tennert.supabase:compose-auth-ui")
implementation("io.ktor:ktor-client-cio:2.3.5")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
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.10.01"))
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation("androidx.compose.ui:ui-test-manifest")
}
和我的build.gradle.kts(proyect)
// Top-level build file where you can add configuration options common to
all sub-projects/modules.
plugins {
id("com.android.application") version "8.1.2" apply false
id("org.jetbrains.kotlin.android") version "1.9.20" apply false
id("com.google.dagger.hilt.android") version "2.48.1" apply false
id("com.google.devtools.ksp") version "1.9.20-1.0.14" apply false
}
评论