gpt4 book ai didi

kotlin - 如何在 KMP 公共(public)源集中使用通用 C/C++ 代码?

转载 作者:行者123 更新时间:2023-12-02 12:55:57 32 4
gpt4 key购买 nike

我正在为 Android 和 iOS 开发一个应用程序,我想重复使用尽可能多的代码。我有一些不包含任何系统库的通用 C 代码(一种算法)。是否可以使用 cinterop 或任何其他工具将其公开给我的常用 Kotlin 源代码集?

我的build.gradle.kts:

plugins {
id("com.android.library")
kotlin("multiplatform")
kotlin("native.cocoapods")
}

android {
compileSdkVersion(29)

defaultConfig {
minSdkVersion(21)
targetSdkVersion(29)
}

sourceSets.all {
manifest.srcFile("src/androidMain/AndroidManifest.xml")
java.srcDirs("src/androidMain/java")
res.srcDirs("src/androidMain/res")
}
}

version = "1.0"

kotlin {
android()
ios()

cocoapods {
// Configure fields required by CocoaPods.
summary = "..."
homepage = "..."

// You can change the name of the produced framework.
// By default, it is the name of the Gradle project.
frameworkName = "SharedModule"
}

// Workaround for ios platform imports to work on Android Studio
// iosX64("ios")

sourceSets["commonMain"].dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-common")
}

sourceSets["androidMain"].dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib")
}

sourceSets.all {
languageSettings.progressiveMode = true
}
}

最佳答案

不是自动的。在 JVM 端,您需要使用 JNI 与 C 代码通信,而在 native 端,您需要使用 Kotlin cinterop。 JNI 和 Kotlin cinterop 将有一个与彼此非常相似但又不相同的 C 代码接口(interface)。要将其公开给通用代码,您需要编写一个通用 API 层,该层委托(delegate)给 JVM 上的 JNI 代码和 native 上的 Kotlin cinterop 代码。

一旦您习惯了,包装非常相似的特定于平台的 API 就非常简单。理想情况下,您可以自动包装它们,但现在不能。我做了一个讨论,讨论了一些技术:https://vimeo.com/371460823

关于kotlin - 如何在 KMP 公共(public)源集中使用通用 C/C++ 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63089372/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com