Kotlin多平台:将Kotlin/Native添加为公共代码

3
我希望创建一个兼容Android和桌面的Kotlin项目,并且该项目需要绑定到一个C库。据我理解,应该创建一个Kotlin多平台项目,并使用JNI包装C库的公共代码。然而,Kotlin/Native可以更轻松地与C库进行交互,所以我想使用它。但是,似乎Kotlin/Native是一个平台(相当于例如jvm或android),因此它不能用作通用代码。有没有办法做到我想要的?我找不到任何简单的示例来实现这一点。如果不可能,为什么?Kotlin/Native能够针对桌面和Android平台进行目标设置。如果可以在Android上使用Kotlin/Native,为什么不可能从“普通”的桌面/Android项目中使用Kotlin/Native库?
1个回答

0

使用 Kotlin Multiplatform 以本机目标实现这一点应该是可行的。

请参见https://kotlinlang.org/docs/native-app-with-c-and-libcurl.html#create-a-definition-file

Kotlin/Native 有助于使用标准 C 库,为您提供了几乎所有可能需要的功能的整个生态系统。Kotlin/Native 已经带有一组预构建平台库,它们为标准库提供了一些附加的常见功能。

更新:

在 Kotlin Multiplatform 中,“common”代码在幕后要么是平台无关的 Kotlin 代码,要么使用 expect/actual 来定义平台抽象(据我所知)。

由于 C 库不属于 a),您将不得不定义实际的平台定义,并最终使用 JNI。

简而言之,KMP 不适合您要尝试的内容。


我已经有了这个,它将本地视为一个平台,就像Android一样。这意味着通用代码包含接口,本地代码包含包装器,但是Android /桌面目标也需要实现接口。我想在所有平台之间分享本地代码。 - Aulaulz
我明白了。添加了更新。 - Róbert Nagy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接