AndroidKotlin项目中Dagger Hilt和KSP的问题:无法解决符号“Inject”

ycggw6v2  于 7个月前  发布在  Kotlin
关注(0)|答案(2)|浏览(97)

我正在使用Kotlin进行一个Android项目,并使用Dagger Hilt进行依赖注入。(Kotlin符号处理)来生成代码,因为kapt现在处于“维护模式”。然而,我遇到了一个问题:匕首柄注解,如@Inject,@Binds和@Module没有被KSP检测到,我得到了一个“无法解析符号”错误。
我正在使用“Framework Quickstarts: Use Supabase with Android Kotlin“文档测试与Supplies的连接,您可以在其中找到代码。我的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")
}

字符串
我的构建.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注解会被正确检测到,代码会按预期工作。

i1icjdpr

i1icjdpr1#

看起来您已经将项目设置为使用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依赖项。
完成这些更改后,请清理并重新构建项目。如果您仍然面临Dagger Hilt注解无法被KSP识别的问题,请确保您拥有与Dagger Hilt和KSP兼容的适当Kotlin版本。
最后,仔细检查你的import语句。确保你在代码中正确导入了Dagger Hilt注解,例如:

import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject

  • 如果您已执行上述所有操作,但问题仍然存在,请提供任何其他错误消息或信息,以帮助更具体地识别问题。
kognpnkq

kognpnkq2#

我终于解决了,我的错误是没有写

implementation 'com.google.dagger:hilt-android:2.48.1'

字符串
我还在build. gradle文件中做了一些更改
现在它完全起作用了。
我离开我的build.gradle.kts(模块):

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
}

相关问题