我使用以下方法将 KSP 与 Room 结合使用:
plugins {
id 'com.google.devtools.ksp' version "$kotlin_version-1.0.0"
Run Code Online (Sandbox Code Playgroud)
dependencies {
ksp "androidx.room:room-compiler:$room_version"
Run Code Online (Sandbox Code Playgroud)
这确实有效。但是,当我尝试运行它时,我会收到此警告
[ksp] MyDatabase.kt:11:架构导出目录未提供给注释处理器,因此我们无法导出架构。您可以提供
room.schemaLocation注释处理器参数或将 exportSchema 设置为 false。
为了做到这一点:使用 KSP 时如何提供注释处理器参数?
我刚刚开始在 Kotlin 中学习 Android,我正在创建一个笔记应用程序只是为了学习目的。我想使用 Room 将保存的笔记存储在我的数据库中,所以我查看了developer.android 教程,我们有一些必要的依赖项,我们必须在 build.gradle(Module) 中添加这些依赖项,如developer.android.com 上提到的https://developer.android.com/training/data-storage/room#kts 但是当我添加这些依赖项时,我遇到了一个我无法弄清楚的错误
在 org.gradle.api.internal.artifacts.dsl.dependency.DefaultDependencyHandler 类型的对象上找不到参数 [androidx.room:room-compiler:2.4.3] 的方法 ksp()
我在 kapt 中遇到了类似的错误,但我通过在 build.gradle(Module) 中添加必要的插件来解决它。现在我正在从 build.gradle 中删除此实现并继续测试项目,但有任何帮助将不胜感激,谢谢。
developer.android.com 中提到的依赖项
dependencies {
val room_version = "2.4.3"
implementation("androidx.room:room-runtime:$room_version")
annotationProcessor("androidx.room:room-compiler:$room_version")
// To use Kotlin annotation processing tool (kapt)
kapt("androidx.room:room-compiler:$room_version")
// To use Kotlin Symbol Processing (KSP)
ksp("androidx.room:room-compiler:$room_version")
// optional - Kotlin Extensions and Coroutines support for Room
implementation("androidx.room:room-ktx:$room_version")
// optional - RxJava2 support for Room
implementation("androidx.room:room-rxjava2:$room_version")
// optional - RxJava3 support for Room
implementation("androidx.room:room-rxjava3:$room_version")
// …Run Code Online (Sandbox Code Playgroud) 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 …Run Code Online (Sandbox Code Playgroud) 我有以下数据类注释@MyAnnotation:
@MyAnnotation
data class MyDataClass(
val foo: Boolean = true,
val bar: Int = 123,
val buz: String? = "abc",
)
Run Code Online (Sandbox Code Playgroud)
从ClassDeclaration我可以获取所有KSPropertyDeclaration,并且我能够获取simpleName并解析KSType,但我不知道如何获取每个属性的默认值。
如何使用Idea和Gradle调试KSP?
在调试模式下从 IDE运行build任务不会将 IDE 附加到进程。
有没有任何命令行方法可以让处理器等待 IDE 连接到进程?
(我使用的是KSP 1.5.31-1.0.0)
当更新到 Kotlin 1.7.0 时,由于最新版本的 Jetpack Compose 需要它,我发现 Room 不再工作。我使用kapt作为我的注释处理器,编译器抛出错误消息,例如:
[*] error: Query method parameters should either be a type that can be converted into a database column or a List / Array that contains such type. You can consider adding a Type Adapter for this.
Run Code Online (Sandbox Code Playgroud) 目前我正在研究KSP(Kotlin Symbol Processing),我很好奇KSP中的“Symbol”是什么意思。
在与 KAPT 进行比较时,它说“为了运行未经修改的 Java 注释处理器,KAPT 将 Kotlin 代码编译成 Java 存根,保留 Java 注释处理器关心的信息。为了创建这些存根,KAPT 需要解析 Kotlin 程序中的所有符号”。
我不知道“Kotlin程序中的所有符号”到底是什么意思?