KMM项目共享层导入自定义修改的.jar依赖失败求助
解决KMM项目中修改SQLDelight Native Driver源码的问题
核心问题
你之前的尝试全部失败,核心原因是:app.cash.sqldelight:native-driver:2.0.0针对iOS的实现不是jar文件。jar是JVM/Android平台的产物,iOS平台需要的是Kotlin/Native编译出的.klib或.framework,你下载的jar里只有JVM端的空存根,完全不包含iOS运行需要的代码,所以替换后必然出现“未解析引用”错误。
正确解决方案
1. 获取并修改SQLDelight源码
- 克隆SQLDelight仓库:
git clone https://github.com/cashapp/sqldelight.git - 切换到2.0.0版本:
git checkout 2.0.0 - 找到
native-driver模块(仓库根目录下的native-driver文件夹),修改你需要的代码。
2. 在KMM项目中引入本地修改后的模块
步骤1:配置settings.gradle.kts
在项目根目录的settings.gradle.kts中,添加本地native-driver模块的引用:
pluginManagement { ... } rootProject.name = "YourKMMProject" // 添加这两行,路径根据你本地sqldelight仓库的位置调整 include(":native-driver") project(":native-driver").projectDir = file("../sqldelight/native-driver")
步骤2:修改shared/build.gradle.kts的依赖
替换原来的远程依赖为本地模块依赖:
kotlin { sourceSets { val androidMain by getting { ... } val iosMain by getting { dependencies { // 替换远程依赖为本地模块 implementation(project(":native-driver")) } } } }
3. 同步并构建项目
- 点击Android Studio的“Sync Project with Gradle Files”按钮
- 重新构建iOS目标,此时会使用你修改后的native-driver代码编译。
为什么之前的方法无效?
- 方法1:用jar替换完全错误,jar不包含iOS平台的代码,仅适用于Android/JVM。
- 方法2:顶级
dependencies块会将jar依赖应用到所有平台,iOS无法识别JVM格式的jar内容。 - 方法3:同样是使用了错误的jar文件,即使写法正确,文件类型不匹配也无法被iOS编译链识别。
内容的提问来源于stack exchange,提问作者broken-cat
相关产品推荐
相关产品推荐

