Aulaulz
Aulaulz

Reputation: 469

Kotlin Multiplatform : add a Kotlin/Native as common code

I want to create a Kotlin project compatible with Android and Desktop. This project needs to bind to a C library.

The way I understand it, I should create a Kotlin multiplatform project, and have a common code which wraps the C library using JNI.

However, Kotlin/Native allows a way easier interop with C libraries, so I'd like to use that. But it seems like Kotlin/Native is a platform (equal to eg jvm or android), so it can't be used as a common code.

Is there a way to do what I want? I couldn't find any simple example doing that.

If that's not possible, why? Kotlin/Native is able to target desktop and android platforms. If it's possible to use Kotlin/Native on Android, why is it impossible to use a Kotlin/Native library from a "normal" desktop/android project?

Upvotes: 4

Views: 1510

Answers (1)

Róbert Nagy
Róbert Nagy

Reputation: 7680

This should be possible with Kotlin Multiplatform, by having a native target.

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

Kotlin/Native helps consume standard C libraries, opening up an entire ecosystem of functionality that exists for pretty much anything you may need. Kotlin/Native is already shipped with a set of prebuilt platform libraries, which provide some additional common functionality to the standard library.

UPDATE:

"common" code in Kotlin Multiplatform under the hood either: a) has platform-agnostic Kotlin code or b) uses expect/actual to define platform abstractions (AFAIK)

Since a C library isn't a), you'll have to define the actual platform definitions, ending up with JNI.

TL;DR KMP isn't suitable for what you're trying to do

Upvotes: 1

Related Questions