Gradle 将“.klib”库添加到kotlin多平台

Gradle 将“.klib”库添加到kotlin多平台,gradle,kotlin,kotlin-multiplatform,kotlin-native,Gradle,Kotlin,Kotlin Multiplatform,Kotlin Native,我想知道如何才能将我的cinterop ted库导入kotlin多平台构建的gradle构建 我已经创建了library.def文件并填充了它,我还生成了library.klib及其附带的文件夹。 我只是不知道如何将它导入gradle 我在互联网上到处找了找,我发现了一个关于科南的参考资料,我想知道这是不是我必须要用的东西,或者是类似于“cinterop”的东西 我查看了以下链接,没有发现任何远程连接到我问题的.klib import部分的内容 一般来说,您需要使用多平台插件。如果您单独构建

我想知道如何才能将我的cinterop ted库导入kotlin多平台构建的gradle构建

我已经创建了
library.def
文件并填充了它,我还生成了
library.klib
及其附带的文件夹。 我只是不知道如何将它导入gradle

我在互联网上到处找了找,我发现了一个关于科南的参考资料,我想知道这是不是我必须要用的东西,或者是类似于“cinterop”的东西

我查看了以下链接,没有发现任何远程连接到我问题的
.klib import
部分的内容


一般来说,您需要使用多平台插件。如果您单独构建一个klib,那么您将创建一些额外的步骤(可能)。在链接2中,它说平台插件已被弃用。Konan是本机平台/编译器的名称。去年有一个单独的插件,但你肯定不想使用它

我刚刚创建了一个示例,但尚未公开,因此这是我手头上最好的一个示例:

我在Firestore图书馆工作。本机配置和互操作配置位于多平台配置中

kotlin {

    android {
        publishAllLibraryVariants()
    }
//        iosArm64()
    iosX64("ios"){
        compilations["main"].cinterops {
            firebasecore {
                packageName 'cocoapods.FirebaseCore'
                defFile = file("$projectDir/src/iosMain/c_interop/FirebaseCore.def")
                includeDirs ("$projectDir/../iosApp/Pods/FirebaseCore/Firebase/Core/Public")
                compilerOpts ("-F$projectDir/src/iosMain/c_interop/modules/FirebaseCore-${versions.firebaseCoreIos}")
            }
            firestore {
                packageName 'cocoapods.FirebaseFirestore'
                defFile = file("$projectDir/src/iosMain/c_interop/FirebaseFirestore.def")
                includeDirs ("$projectDir/../iosApp/Pods/FirebaseFirestore/Firestore/Source/Public", "$projectDir/../iosApp/Pods/FirebaseCore/Firebase/Core/Public")
                compilerOpts ("-F$projectDir/src/iosMain/c_interop/modules/FirebaseFirestore-${versions.firebaseFirestoreIos}")
            }
        }
    }
}

cinterops
设置def文件的位置和参数。然后,我将整个内容发布为一个多平台库。实际的本机工件最终是一个klib,但它都是用gradle和依赖元数据管理的。

好的,所以我从github上的示例复制了KotlinDSL代码,但是导入
org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
时出错,因为它的颜色为
jetbrains
红色。我怎样才能导入它?你最终成功了吗?我还创建了my
.klib
,但不知道如何加载它。也许你最后使用了Gradle
.interops
,但我还没能让它起作用。我很确定我只是完全放弃了这个项目。我不确定我是否能让它工作,但在那些日子里,Kotlin Native还处于婴儿期。明天我能让它工作时,我会补充一个答案(希望如此)。目前,我的Gradle甚至无法识别interops关键字。我希望我是一个6502开发早在80年代现在lol@IMlolenstine还没有。我已经取得了进步(见我在这里的帖子),但仍在努力。我决定继续攻克这个问题,但也要研究Kotlin/Native/JNI解决方案。通过这种方式,我得到了我想要的工作(尽管不是使用KMM),但是如果我设法让KMM工作,我可以轻松地重用我的Kotlin/JNI代码。我将继续致力于KMM,希望它能在某个时候发挥作用,并更新这篇文章和另一篇文章。@IMlolenstine嘿,我想我找到了一个适合我的用例(C/C++互操作)的解决方案。也许这对你也有用。请查看我之前评论中链接的SO问题中Artyom答案中的评论