gradle - 将 `.klib` 库添加到 kotlin 多平台

标签 gradle kotlin kotlin-multiplatform kotlin-native

我想知道如何将我的 cinterop-ted 库导入到 kotlin 多平台构建的 gradle 构建中。

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

我浏览了整个互联网,找到了对 Konan 的引用,我想知道这是我必须使用的东西,还是用于类似于“cinterop”的东西。

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

Link #1 (kotlinlang.org)

Link #2 (github.com)

Link #3 (plugins.gradle.org)

最佳答案

通常,您会希望使用多平台插件。如果您单独构建一个 klib,您将创建一些额外的步骤(可能)。在链接 #2 中,它表示平台插件已弃用。 Konan 是 native 平台/编译器的名称。去年有一个单独的插件,但您绝对不想使用它。

我刚刚创建了一个示例,但它还没有公开,所以这是我手头最好的一个:

https://github.com/JetBrains/kotlin-native/blob/3329f74c27b683574ac181bc40e3836ceccce6c1/samples/tensorflow/build.gradle.kts#L12

我正在开发 Firestore 库。 native 和互操作配置存在于多平台配置中。

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 和依赖元数据管理。

关于gradle - 将 `.klib` 库添加到 kotlin 多平台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57170318/

相关文章:

android - 无法解析 : com. android.support :palette-v7:26. 0.1

gradle - 如何将gradle生成的源文件夹添加到Eclipse项目?

kotlin - 无法在 commonMain 中为 kotlin 多平台使用依赖项

gradle - 如何使用gradle复制所有源jar

java - 将使用插件的Maven项目转换为Gradle项目

android - Kotlin - 如何下载 .mp3 文件并保存到内部存储

kotlin - 如何从Corda流中的多个状态参与者那里收集签名?

gradle - 通过使用kotlin-gradle中的子项目"Unresolved reference: implementation"

Kotlin 多平台 : kotlinx. coroutines.test 库在 commonTest 模块中不可见

gradle - 无法使用kotlin-multipatform项目