我正在尝试为kotlin创建一个多平台库,而我想使用本机cinterop(ted)库来实现。
我将其导入gradle中,并加载,如果将commonMain更改为Native,则加载库,否则为红色。
这是我目前正在尝试做的事情吗?我们可以将本机(交叉使用的)库导入常见的kotlin吗?
我将gradle文件添加到底部(Kotlin DSL)
plugins {
id("org.jetbrains.kotlin.multiplatform").version("1.3.41")
id("maven-publish")
}
repositories {
mavenCentral()
}
group = "xyz.mglolenstine"
version = "0.0.1"
kotlin {
jvm()
js {
browser {
}
nodejs {
}
}
// For ARM, should be changed to iosArm32 or iosArm64
// For Linux, should be changed to e.g. linuxX64
// For MacOS, should be changed to e.g. macosX64
// For Windows, should be changed to e.g. mingwX64
linuxX64("linux")
val commonMain by sourceSets.getting {
dependencies {
implementation(kotlin("stdlib-common"))
implementation(fileTree("libs"))
}
}
val commonTest by sourceSets.getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
implementation(fileTree("libs"))
}
}
val jvmMain by sourceSets.getting {
dependencies {
implementation(kotlin("stdlib-jdk8"))
implementation(fileTree("libs"))
}
}
val jvmTest by sourceSets.getting {
dependencies {
implementation(kotlin("test"))
implementation(kotlin("test-junit"))
implementation(fileTree("libs"))
}
}
val jsMain by sourceSets.getting {
dependencies {
implementation(kotlin("stdlib-js"))
implementation(fileTree("libs"))
}
}
val jsTest by sourceSets.getting {
dependencies {
implementation(kotlin("test-js"))
implementation(fileTree("libs"))
}
}
val linuxMain by sourceSets.getting {
dependencies {
implementation(fileTree("libs"))
}
}
val linuxTest by sourceSets.getting {
dependencies {
implementation(fileTree("libs"))
}
}
}
如果我可以做些改进gradle文件的事情,请告诉我,因为我还是Kotlin DSL的新手,并且我的待办事项也有改进。
答案 0 :(得分:1)
我想这是不可用的,就cinterop
工具而言,它仅为外部库创建绑定,而不为表示形式创建绑定。而且,klib
是纯本机工具,如您在documentation中所见。
答案 1 :(得分:-1)
使用expect/actual机制,可以使用平台相关的代码为给定类创建不同的实现,该机制的工作原理类似于接口:
expect class Foo {
fun bar(): String
}
actual class WindowsFoo : Foo() {
actual fun bar(): String {
return "Windows platform calls go here"
}
}