解决 Provided Metadata instance has version 2.1.0, while maximum supported version is 2.0.0. To support newer versions, update the kotlinx-metadata-jvm library.的问题
解决方法:
将
androidx.room:room-compiler:2.6.1
更改为
androidx.room:room-compiler-processing:2.6.1
解决了问题这个问题。但是运行到数据库逻辑报错,DataBase无法生成,涉及到ksp
首先请务必选择与项目的 Kotlin 版本一致的 KSP 版本 下面链接找最新版
https://github.com/google/ksp/releases
配置项目级build.gradle
id 'com.google.devtools.ksp' version '2.1.0-1.0.29'
配置app moudle级build.gradle中的plugins
id "com.google.devtools.ksp"
并且添加路径配置
android {
sourceSets["main"].java.srcDir("build/generated/ksp/main/kotlin")
}
最后ksp依赖
ksp "androidx.room:room-compiler:2.6.1"
完毕!!!
解释原因:
room-compiler 和 room-compiler-processing 的区别:
room-compiler 是 Room 的标准注解处理器,它负责在编译时处理 Room 的数据库注解(如 @Entity, @Dao 等)。但是,在某些情况下,特别是在使用 Kotlin 1.9 或更高版本时,room-compiler 可能与 Kotlin 元数据 2.1.0 版本不兼容,导致无法正常处理注解。
room-compiler-processing是一个专门为 Kotlin 1.9+ 和 新版 Kotlin 元数据版本(例如 2.1.0) 提供支持的版本。它更新了对 Kotlin 元数据 的支持,解决了版本冲突的问题。
room-compiler-processing 的改进: androidx.room:room-compiler-processing 版本提供了对 Kotlin 2.1.0 元数据 的支持,并解决了与旧版注解处理器(room-compiler)的 不兼容问题。具体来说,它更新了对 Kotlin 元数据的版本兼容性,使得 Room 能够正确处理新的 Kotlin 编译器元数据格式(2.1.0)。
这就是为什么当你将 room-compiler 替换为 room-compiler-processing 后,问题得到了解决。room-compiler-processing 版本在内部处理了 Kotlin 元数据格式的更新,从而避免了因版本不兼容导致的错误。
为什么会发生这种错误:
这是因为 Room 在处理 Kotlin 注解时,依赖于 kotlinx-metadata-jvm 库来解析 Kotlin 的类和注解。Kotlin 1.9 版本引入了 2.1.0 的 Kotlin 元数据格式,而旧版 Room 库(如 room-compiler)并不兼容这个格式。
使用 room-compiler-processing 版本,Room 内部更新了对该新格式的支持,从而解决了与 kotlinx-metadata-jvm 2.1.0 版本之间的兼容性问题。