升级Kotlin Multiplatform后Android构建报错:无法访问RoomDatabase.Builder
问题描述
更新Kotlin Multiplatform版本后,Android项目构建报错,但iOS端运行正常:
Cannot access class 'androidx.room.RoomDatabase.Builder'. Check your module classpath for missing or conflicting dependencies.
相关依赖配置如下:
# libs.versions.toml 内容 kotlin = "2.1.10" ksp = "2.1.10-1.0.29" sqlite = "2.5.1" room = "2.7.1" kotlinx-serialization-json = "1.8.0" # Room 依赖定义 room-compiler = { module = "androidx.room:room-compiler", version.ref = "room" } room-runtime = { module = "androidx.room:room-runtime", version.ref = "room" } sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "sqlite" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization-json" }
// build.gradle.kts 配置 plugins { ... alias(libs.plugins.multiplatform.library) alias(libs.plugins.ksp) alias(libs.plugins.room) alias(libs.plugins.serialization) ... } sourceSets { commonMain.dependencies { ... implementation(libs.room.runtime) implementation(libs.sqlite.bundled) implementation(libs.kotlinx.serialization.json) ... } }
排查与解决步骤
1. 修复Room与Kotlin的版本兼容性
Room 2.7.1对Kotlin版本有明确适配要求,你当前用的Kotlin 2.1.10属于较新的大版本,大概率存在兼容性冲突。两种解决方向:
- 降级Kotlin到Room官方推荐的稳定版本(比如Kotlin 1.9.24,完全适配Room 2.7.1)
- 升级Room到支持Kotlin 2.x的版本(目前Room最新稳定版已适配Kotlin 2.x,可尝试升级到2.6.1及以上版本)
2. 调整Room依赖的平台归属
room-runtime和sqlite-bundled是Android专属依赖,不能放在commonMain中——这会导致非Android平台引入无效依赖,同时Android端也可能因依赖传递逻辑混乱出现类路径问题。修改源码集配置:
sourceSets { commonMain.dependencies { ... // 保留跨平台通用依赖 implementation(libs.kotlinx.serialization.json) ... } androidMain.dependencies { ... // 仅在Android源中添加Room相关依赖 implementation(libs.room.runtime) implementation(libs.sqlite.bundled) ... } }
3. 修正KSP插件的Multiplatform配置
KSP在Multiplatform项目中需要针对Android目标单独配置,确保生成的代码能被Android编译正确识别:
plugins { // 避免全局应用KSP插件,改为按需配置 alias(libs.plugins.ksp) apply false } kotlin { androidTarget { compilations.all { kotlinOptions { jvmTarget = "1.8" } // 为Android编译模块配置KSP ksp { arg("room.schemaLocation", "$projectDir/schemas") // 可选,用于生成Room schema } } } // iOS等其他平台配置保持不变... } dependencies { // 仅为Android目标添加Room编译器的KSP依赖 kspAndroid(libs.room.compiler) }
4. 清理缓存并重新构建
执行以下命令清除Gradle缓存,避免旧缓存残留导致的依赖冲突:
./gradlew clean build --refresh-dependencies
内容的提问来源于stack exchange,提问作者ItSNeverLate
相关产品推荐
相关产品推荐

