添加SQLDelight依赖后Compose多平台模板出现构建错误
问题解决方案
针对你遇到的三个错误,逐一排查修复:
1. Unresolved reference: androidTarget
这个错误是因为你在配置SQLDelight驱动时错误引用了不存在的androidTarget变量。在Compose Multiplatform的shared模块中,Android目标的配置需通过Kotlin多平台的源集区分,正确做法是在sqldelight块中针对androidMain源集配置SQLite驱动:
sqldelight { databases { create("Database") { packageName.set("com.project.shared.db") // 针对各平台源集配置对应驱动 sourceSets { getByName("androidMain") { dependency("app.cash.sqldelight:android-driver:2.0.0") } getByName("iosMain") { dependency("app.cash.sqldelight:native-driver:2.0.0") } getByName("desktopMain") { dependency("app.cash.sqldelight:sqlite-driver:2.0.0") } } } } }
不要直接使用androidTarget,而是通过源集名称指定依赖。
2. SQLDelight Gradle plugin was applied but there are no databases set up
这个问题通常是数据库配置与.sq文件路径不匹配导致的:
- 若遵循默认规范,需将
Database.sq放在src/commonMain/sqldelight/com/project/shared/db/目录下(这是SQLDelight的schema专属目录,而非Kotlin代码目录)。 - 若想保留现有文件位置,可在配置中手动指定schema目录:
sqldelight { databases { create("Database") { packageName.set("com.project.shared.db") schemaDirectory.set(file("src/commonMain/com/project/shared/db")) } } }
配置后SQLDelight就能识别到你的.sq文件与数据库定义。
3. commonTest源集未关联编译
SQLDelight插件默认会修改测试源集配置,需手动为commonTest补充依赖:
在kotlin块的sourceSets中添加如下配置:
kotlin { // ... 其他平台配置 sourceSets { val commonTest by getting { dependencies { implementation("app.cash.sqldelight:runtime:2.0.0") implementation("app.cash.sqldelight:sqlite-driver:2.0.0") // 保留原有测试依赖如kotest等 } } } }
同时确保commonTest的目录结构为src/commonTest/kotlin,未被错误修改。
额外检查项
- 确认项目根目录
settings.gradle.kts中已包含插件仓库:
pluginManagement { repositories { google() mavenCentral() gradlePluginPortal() } }
- 确认shared模块
build.gradle.kts顶部已正确应用插件:
plugins { kotlin("multiplatform") id("com.android.library") id("org.jetbrains.compose") id("app.cash.sqldelight") version "2.0.0" }
内容的提问来源于stack exchange,提问作者MrPlow
相关产品推荐
相关产品推荐

