android - Android Kotlin 项目中的 Dagger Hilt 和 KSP 问题 : Cannot Resolve Symbol ‘Inject’

标签 android kotlin supabase dagger-hilt google-developer-tools

我正在使用 Kotlin 开发一个 Android 项目,并使用 Dagger Hilt 进行依赖项注入(inject)。最近,我尝试从 kapt 迁移到 KSP(Kotlin 符号处理)来生成代码,因为 kapt 现在处于“维护模式”。但是,我遇到了一个问题:KSP 未检测到 Dagger Hilt 注释(例如 @Inject、@Binds 和 @Module),并且我收到“无法解析符号”错误。

我正在使用“Framework Quickstarts: Use Supabase with 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(项目):

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 进行依赖项注入(inject),但您遇到了 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

如果您已完成上述所有操作,但问题仍然存在,请提供任何其他错误消息或可能有助于更具体地识别问题的信息。

关于android - Android Kotlin 项目中的 Dagger Hilt 和 KSP 问题 : Cannot Resolve Symbol ‘Inject’ ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77424563/

相关文章:

java - 为什么 PMD 建议将字段设为最终字段?

android - 从另一个 Activity 更改 ImageView

android - RxJava Completable.andThen 永远不会触发第二个 Completable

postgresql - 无法从 Supabase 运行 pg_dump

node.js - 在 Supabase 中使用 Express 框架部署 Node Js 应用程序(Edge Functions)

javascript - 如何从 SvelteKit 应用程序发送安全的 API 请求,而不在客户端显示 API key ?

android - 错误显示在gradle同步

java - 是否可以在 Mersenne Twister RNG (Java) 中指定 nextInt 的上限和下限

kotlin - Freemarker模板中的Kotlin扩展方法

java - RecyclerView无法显示从服务器检索到的数据