我目前正在进行一个项目,该项目实现了以下步骤:
1.使用开放API生成器和摇摆描述文件为API生成KMP项目
1.打包common、jvm和iOS库
1.创建KMM项目
1.添加并使用在步骤2中生成的库
步骤1工作正常。
对于第2步,我使用assemble
gradle任务,该任务在build/libs文件夹中生成以下二进制文件:
- kotlin-client-iosarm64-1.0.0-metadata.jar
- kotlin-client-iosx64-1.0.0-metadata.jar
- kotlin-client-js-1.0.0.jar
- kotlin-client-jvm-1.0.0.jar
- kotlin-client-metadata-1.0.0.jar
对于步骤3,我使用Android Studio和JetBrains的“Kotlin多平台移动的”插件,并选择“Kotlin多平台库”模板。
目前,我没有将生成的二进制文件部署到maven存储库中,因此在第4步中,我将jar文件复制/粘贴到“libs”文件夹中,并将其引用到build.gradle.kts文件中:
sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.3.3")
implementation("io.ktor:ktor-client-core:2.1.3")
implementation("io.ktor:ktor-client-serialization:2.1.3")
implementation("io.ktor:ktor-client-content-negotiation:2.1.3")
implementation("io.ktor:ktor-serialization-kotlinx-json:2.1.3")
implementation(files("libs/kotlin-client-metadata-1.0.0.jar"))
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
}
}
val androidMain by getting {
dependencies {
implementation("io.ktor:ktor-client-cio-jvm:2.1.3")
implementation(files("libs/kotlin-client-jvm-1.0.0.jar"))
}
}
val androidUnitTest by getting
val iosX64Main by getting {
dependencies {
implementation("io.ktor:ktor-client-ios:2.1.3")
implementation(files("libs/kotlin-client-iosx64-1.0.0-metadata.jar"))
}
}
val iosArm64Main by getting {
dependencies {
implementation("io.ktor:ktor-client-ios:2.1.3")
implementation(files("libs/kotlin-client-iosarm64-1.0.0-metadata.jar"))
}
}
val iosSimulatorArm64Main by getting
val iosMain by creating {
dependsOn(commonMain)
iosX64Main.dependsOn(this)
iosArm64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
}
val iosX64Test by getting
val iosArm64Test by getting
val iosSimulatorArm64Test by getting
val iosTest by creating {
dependsOn(commonTest)
iosX64Test.dependsOn(this)
iosArm64Test.dependsOn(this)
iosSimulatorArm64Test.dependsOn(this)
}
}
使用这种配置,它似乎只适用于我的KMM库项目的Android部分。
事实上,在我的KMM库项目中,我可以将KMP项目中的类使用到“androidMain”文件夹中的类中。但是当我尝试将相同的类使用到“commonMain”或“iosMain”文件夹中的类时,它不起作用。
我的项目出了什么问题?我如何打包我的KMP库以便在KMM库中使用它?
1条答案
按热度按时间kgsdhlau1#
你不能在iOS和普通代码中使用你的库的主要原因,因为文件
kotlin-client-*-metadata.jar
只是元数据。对于多平台和本地代码,Kotlin使用特殊格式的库*.klib
。请看article解释这一点。如果您不想发布库而想使用本地设置,则无需构建库,这不是Gradle的方式。将库放在主代码附近,利用多项目构建,并向库项目添加依赖项:
或者在本地Maven资源库中发布。