向Kotlin多平台添加`.klib`库

时间:2019-07-23 18:38:02

标签: gradle kotlin kotlin-multiplatform kotlin-native

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

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

我在Internet上浏览了所有内容,找到了对Konan的引用,我想知道这是否是我必须使用的东西,或者是否是用于类似于“ cinterop”的东西。

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

Link #1 (kotlinlang.org)

Link #2 (github.com)

Link #3 (plugins.gradle.org)

1 个答案:

答案 0 :(得分:1)

通常,您将需要使用多平台插件。如果要分别构建klib,则将创建一些额外的步骤(可能)。在链接2中,该平台插件已弃用。 Konan是本机平台/编译器的名称。去年有一个单独的插件,但是您绝对不想使用它。

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

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

我正在研究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和依赖项元数据进行管理。