【问题标题】:How to build kotlinx.coroutines in Kotlin/Native (test version 0.23.4-native-1)如何在 Kotlin/Native 中构建 kotlinx.coroutines(测试版本 0.23.4-native-1)
【发布时间】:2026-01-02 08:00:01
【问题描述】:

这个问题是这个线程的延续: https://github.com/Kotlin/kotlinx.coroutines/issues/246#issuecomment-407023156

我正在尝试在针对 iOS 的 Kotlin/Native 项目中使用 org.jetbrains.kotlinx:kotlinx-coroutines-core-native:0.23.4-native-1

build.gradle:

buildscript {
    repositories {
        mavenCentral()
        maven { url "https://dl.bintray.com/jetbrains/kotlin-native-dependencies" }
    }

    dependencies {
        classpath 'org.jetbrains.kotlin:kotlin-native-gradle-plugin:0.8'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.51"
    }
}

apply plugin: 'kotlin-platform-native'

repositories {
    jcenter()
    mavenCentral()
    maven { url "https://kotlin.bintray.com/kotlinx" }
}

sourceSets {
    main {
        component {
            target 'ios_arm32', 'ios_arm64', 'ios_x64'
            outputKinds = [KLIBRARY]
        }
    }
}

dependencies {
    expectedBy project(':common')
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:0.23.4-native-1"
}

kotlinx:kotlinx-coroutines-core-native 依赖项似乎不起作用,因为会产生如下构建错误:

error: unresolved reference: coroutines
import kotlinx.coroutines.experimental.*
               ^

如果我手动包含 org.jetbrains.kotlinx:kotlinx-coroutines-core-native_release_ios_x64:0.10.3-native 等工件依赖项,则会收到编译器异常:

exception: java.lang.IllegalStateException: Could not find "atomicfu-native"

即使我还添加了org.jetbrains.kotlinx:atomicfu-native:0.10.3-native 依赖项,此错误仍然存​​在。

【问题讨论】:

    标签: kotlin kotlinx.coroutines kotlin-native


    【解决方案1】:

    以下是要检查的事项列表(我已经通过了这个,终于成功了):

    • 启用 Gradle 元数据。需要检索协程依赖项。为此,请在所有“包含”说明之后,在“settings.gradle”文件中添加这一行:

      enableFeaturePreview('GRADLE_METADATA')
      
    • 使用 gradle 4.7(较新版本与当前协程库的元数据不兼容,它们需要 0.4 版本的东西,而当前发布的使用 0.3)

    • 在 iOS 模块中:

      implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-native:0.23.4-native-1"
      
    • 在你的通用模块中:

      implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:0.23.4"
      
    • 如果你有一个 js 模块,它可能会因为 gradle 元数据特性而失败。您可以通过在每个“存储库”块之前添加它来修复它 (https://github.com/srs/gradle-node-plugin/issues/301)

      repositories.whenObjectAdded {
          if (it instanceof IvyArtifactRepository) {
              metadataSources {
                  artifact()
              }
          }
      }
      

    希望这就足够了!

    【讨论】:

    • 感谢@David,这有帮助。事实证明,我还必须删除 jcenter() 存储库,否则它仍然无法工作。你知道那是什么吗?
    • 当你在这里时:似乎新的 Kotlin/Native 插件 DSL 不支持 FRAMEWORK 输出,或与 Swift/Obj-C 互操作。你知道我如何将这个新的 DSL 与 konan 插件并行使用来导入互操作库,然后将构建输出转换为框架吗?
    • 嗨,outputKinds = [FRAMEWORK] 适用于 kotlin-native-gradle-plugin:0.9-dev-2922
    • 我已经执行了上面链接中描述的过程。 Android 构建成功,但我不知道如何将框架导入 xcode。有人可以帮我吗?
    最近更新 更多