gradle 将.jar导入KMM项目共享层

sczxawaw  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(128)

我正在做一个Kotlin-Multiplatform项目,我在shared/build.gradle.kts for iosMain中有一定的依赖性,我想编辑它的源代码。

shared/build.gradle.kts

kotlin {
  sourceSets {
    val androidMain by getting { ... }
    val iosMain by getting {
      dependencies { 
        implementation("app.cash.sqldelight:native-driver:2.0.0")
      }
    }
  }
}

据我所知,为了做到这一点,我必须获取库的.jar文件,编辑代码,然后将该jar添加到Android Studio。

What I Tried

在iosMain中正常添加jar依赖

1.我试着从maven repo下载native-driver-2.0.0.jar jar,然后把它放在我项目的shared/libs目录中。
1.接下来,我将implementation("app.cash.sqldelight:native-driver:2.0.0")替换为implementation(files("libs/native-driver-2.0.0.jar"))
然而,这不起作用。由于“未解决的引用”,ios应用程序不再构建,我不知道为什么。

通过顶层声明将jar依赖添加到iosMain中

我还注意到,当我最初将.jar文件添加到Android Studio时,右键单击它,并选择“添加为库”选项,弹出一个对话框说,“Studio无法确定所选项目包含的文件类型。从列表中选择适当的类别”。
我从列表中选择哪个选项似乎并不重要(类、外部注解、Jar目录、JavaBean、本地库位置、源文件目录、源代码)。我尝试的那些都只是在我的共享/build.gradle.kts中添加一个顶级块:

kotlin {
    sourceSets {
        val iosMain by getting { ... }
    }
}

dependencies {
    implementation("libs/native-driver-2.0.0.jar")
}

Android Studio同步后,项目视图中的jar文件下方会出现一个箭头。当我在iosMain中添加jar依赖项时,这并没有发生。
我想知道这是否与顶级块中的依赖有关,所以我也尝试了:

dependencies {
    "iosMainImplementation"(files("native-driver-2.0.0.jar"))
}

这个语法应该相当于根据Kotlin规范将依赖放在iosMain依赖块中,但我的项目并没有在此之后构建,Android Studio也没有为jar文件添加箭头。

vh0rcniy

vh0rcniy1#

你不能这样编辑共享的jar,真的。一般来说,来自maven repo的源代码用于调试和浏览,而不是编辑。这是标准的Java依赖项。对于KMP,在iOS端,Kotlin编译器为原生库输出完全不同的格式。
如果你想编辑驱动程序,你应该派生SQLDelight,并在本地发布你自己的驱动程序,或者只是在代码中实现SqlDriver并使用它来代替提供的驱动程序。
https://github.com/cashapp/sqldelight
原生驱动程序在这里:https://github.com/cashapp/sqldelight/blob/master/drivers/native-driver/src/nativeMain/kotlin/app/cash/sqldelight/driver/native/NativeSqlDatabase.kt#L100

相关问题