Kapt 到 KSP 迁移错误

Abh*_*bhi 18 android kotlin kapt kotlin-symbol-processing

kapt当我尝试使用to迁移 Android 项目时收到错误消息KSP

错误信息

Unable to find method ''void org.jetbrains.kotlin.gradle.tasks.KotlinCompile.<init>(org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions)''
'void org.jetbrains.kotlin.gradle.tasks.KotlinCompile.<init>(org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions)'

Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)

Re-download dependencies and sync project (requires network)
The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.

Stop Gradle build processes (requires restart)
Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.

In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.
Run Code Online (Sandbox Code Playgroud)

目前,以下库正在使用kapt.

  1. 莫希
  2. 希尔特
  3. 房间

build.gradle

plugins {
    id "com.android.application"
    id "kotlin-android"
    id "kotlin-kapt"
    id "dagger.hilt.android.plugin"
    id "com.google.devtools.ksp" version "1.6.10-1.0.4"
}

dependencies {

    // Hilt
    implementation "com.google.dagger:hilt-android:$rootProject.hiltVersion"
    kapt "com.google.dagger:hilt-compiler:$rootProject.hiltVersion"
    implementation "androidx.hilt:hilt-lifecycle-viewmodel:$rootProject.hiltLifecycleViewModelVersion"
    kapt "androidx.hilt:hilt-compiler:$rootProject.hiltCompilerVersion"

    // KSP
    // implementation "com.google.devtools.ksp:symbol-processing-api:1.6.10-1.0.4"

    // Moshi
    implementation "com.squareup.moshi:moshi:$rootProject.moshiVersion"
    implementation "com.squareup.moshi:moshi-kotlin:$rootProject.moshiKotlinVersion"
    kapt "com.squareup.moshi:moshi-kotlin-codegen:$rootProject.moshiKotlinCodegenVersion"
    // ksp "com.squareup.moshi:moshi-kotlin-codegen:1.13.0"

    // Room
    implementation "androidx.room:room-runtime:$rootProject.roomVersion"
    implementation "androidx.room:room-ktx:$rootProject.roomVersion"
    annotationProcessor "androidx.room:room-compiler:$rootProject.roomVersion"
    ksp "androidx.room:room-compiler:$rootProject.roomVersion"
    androidTestImplementation "androidx.room:room-testing:$rootProject.roomVersion"
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,该存储库托管在此处 - https://github.com/Abhimanyu14/finance-manager

Abh*_*bhi 18

正如问题中提到的,我正在使用以下使用kapt.

  1. 莫希
  2. 希尔特
  3. 房间

KSP Docs中,我发现Hilt尚不支持。(截至 2022 年 6 月 25 日)。

因此,我需要在我的项目中同时使用kapthilt


下面就是build.gradle这样做的,

plugins {
    id "kotlin-kapt"
    id "dagger.hilt.android.plugin"
    id "com.google.devtools.ksp" version "1.6.21-1.0.6"
}

// Hilt
implementation "com.google.dagger:hilt-android:$rootProject.hiltVersion"
kapt "com.google.dagger:hilt-compiler:$rootProject.hiltVersion"
//ksp "com.google.dagger:hilt-compiler:$rootProject.hiltVersion"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:$rootProject.hiltLifecycleViewModelVersion"
kapt "androidx.hilt:hilt-compiler:$rootProject.hiltCompilerVersion"
// ksp "androidx.hilt:hilt-compiler:$rootProject.hiltCompilerVersion"

// KSP
implementation "com.google.devtools.ksp:symbol-processing-api:1.6.21-1.0.6"

// Moshi
implementation "com.squareup.moshi:moshi:$rootProject.moshiVersion"
implementation "com.squareup.moshi:moshi-kotlin:$rootProject.moshiKotlinVersion"
// kapt "com.squareup.moshi:moshi-kotlin-codegen:$rootProject.moshiKotlinCodegenVersion"
ksp "com.squareup.moshi:moshi-kotlin-codegen:1.13.0"preferences:$rootProject.datastorePreferencesVersion"

// Room
implementation "androidx.room:room-runtime:$rootProject.roomVersion"
implementation "androidx.room:room-ktx:$rootProject.roomVersion"
annotationProcessor "androidx.room:room-compiler:$rootProject.roomVersion"
// kapt "androidx.room:room-compiler:$rootProject.roomVersion"
ksp "androidx.room:room-compiler:$rootProject.roomVersion"
androidTestImplementation "androidx.room:room-testing:$rootProject.roomVersion"
Run Code Online (Sandbox Code Playgroud)

库版本

roomVersion = "2.5.0-alpha02"
moshiVersion = "1.13.0"
hiltVersion = "2.42"
hiltPluginVersion = "2.40.1"
hiltLifecycleViewModelVersion = "1.0.0-alpha03"
hiltCompilerVersion = "1.0.0"
Run Code Online (Sandbox Code Playgroud)

还遇到了这个错误 - Room - Schema 导出目录未提供给注释处理器,因此我们无法导出 schema

这个解决方案有帮助 - /sf/answers/5001592011/

ksp {
    arg('room.schemaLocation', "$projectDir/schemas")
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到了同样的问题,看来 hilt 还不支持 KSP,所以将其包含在你的 gradle 文件中

plugin {
    ...
    id "kotlin-kapt"
    ...
}
Run Code Online (Sandbox Code Playgroud)

并替换

 ksp 'com.google.dagger:hilt-compiler:2.44'
Run Code Online (Sandbox Code Playgroud)

 kapt 'com.google.dagger:hilt-compiler:2.44'
Run Code Online (Sandbox Code Playgroud)

它适用于我的情况:)