我正在做一个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文件添加箭头。
1条答案
按热度按时间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