Skip to content

Kotlin/Native 支持的目标和主机

本文档描述了 Kotlin/Native 编译器支持哪些目标和主机。

我们可以根据实际情况调整支持的目标和主机列表、层级数量及其功能。

目标层级

Kotlin/Native 编译器支持许多不同的目标,但对它们的支持程度各不相同。 为了明确这些级别,我们根据编译器对这些目标的支持程度将它们分为几个层级。

层级表格包含以下列:

  • Gradle 目标名称 是在 Kotlin 多平台 Gradle 插件中用于启用该目标的 目标名称

  • 目标三元组 是根据 <architecture>-<vendor>-<system>-<abi> 结构确定的目标名称,这是 编译器常用的 命名方式。

  • 运行测试 表示该目标是否允许用户在 Gradle 和 IDE 中开箱即用运行测试(不要与为目标本身运行的 持续集成 (CI) 测试混淆)。

    这仅在特定目标的原生主机上可用。例如,你只能在 macOS ARM64 主机上运行 macosArm64iosArm64 测试。

第 1 层级

Gradle 目标名称目标三元组运行测试描述
仅限 Apple macOS 主机:
macosArm64aarch64-apple-macosApple Silicon 平台上的 Apple macOS 11.0 及更高版本
iosSimulatorArm64aarch64-apple-ios-simulatorApple Silicon 平台上的 Apple iOS 模拟器 14.0 及更高版本
iosArm64aarch64-apple-iosARM64 平台上的 Apple iOS 和 iPadOS 14.0 及更高版本

第 2 层级

Gradle 目标名称目标三元组运行测试描述
linuxX64x86_64-unknown-linux-gnux86_64 平台上的 Linux
linuxArm64aarch64-unknown-linux-gnuARM64 平台上的 Linux
仅限 Apple macOS 主机:
watchosSimulatorArm64aarch64-apple-watchos-simulatorApple Silicon 平台上的 Apple watchOS 模拟器 7.0 及更高版本
watchosArm32armv7k-apple-watchosARM32 平台上的 Apple watchOS 7.0 及更高版本
watchosArm64arm64_32-apple-watchos带有 ILP32 的 ARM64 平台上的 Apple watchOS 7.0 及更高版本
tvosSimulatorArm64aarch64-apple-tvos-simulatorApple Silicon 平台上的 Apple tvOS 模拟器 14.0 及更高版本
tvosArm64aarch64-apple-tvosARM64 平台上的 Apple tvOS 14.0 及更高版本

第 3 层级

  • 不保证该目标在 持续集成 (CI) 上进行测试。
  • 我们无法承诺不同编译器发布版本之间的源代码和二进制兼容性,尽管针对这些目标的此类更改非常罕见。

第 3 层级目标不在活跃开发中,可能会出现破坏性问题。 请谨慎使用。

Gradle 目标名称目标三元组运行测试描述
androidNativeArm32arm-unknown-linux-androideabiARM32 平台上的 Android NDK
androidNativeArm64aarch64-unknown-linux-androidARM64 平台上的 Android NDK
androidNativeX86i686-unknown-linux-androidx86 平台上的 Android NDK
androidNativeX64x86_64-unknown-linux-androidx86_64 平台上的 Android NDK
mingwX64x86_64-pc-windows-gnu使用 MinGW 兼容层的 64 位 Windows 10 及更高版本
仅限 Apple macOS 主机:
watchosDeviceArm64aarch64-apple-watchosARM64 平台上的 Apple watchOS 7.0 及更高版本
iosX64x86_64-apple-ios-simulatorx86-64 平台上的 Apple iOS 模拟器 14.0 及更高版本

linuxArm32Hfp 目标已被弃用,并将在未来的版本中移除。

已弃用的目标

从 Kotlin 2.3.20 开始,以下目标已弃用:

  • macosX64(x86_64 平台上的 Apple macOS 11.0 及更高版本)
  • watchosX64(x86_64 平台上的 Apple watchOS 7.0 及更高版本的 64 位模拟器)
  • tvosX64(x86_64 平台上的 Apple tvOS 14.0 及更高版本的模拟器)

对于库作者

我们不建议库作者测试比 Kotlin/Native 编译器更多的目标或提供比其更严格的保证。在考虑支持原生目标时,你可以采用以下方法:

  • 支持第 1、2 和 3 层级的所有目标。
  • 定期测试支持开箱即用运行测试的第 1 和 2 层级目标。

Kotlin 团队在官方 Kotlin 库中也使用了这种方法,例如 kotlinx.coroutineskotlinx.serialization

主机

Kotlin/Native 编译器支持以下主机:

主机操作系统构建最终二进制文件生成 .klib 构件
搭载 Apple 芯片 (ARM64) 的 macOS任何受支持的目标任何受支持的目标
搭载 Intel 芯片 (x86_64) 的 macOS任何受支持的目标任何受支持的目标
采用 x86_64 架构的 Linux任何受支持的目标(Apple 目标除外)任何受支持的目标,Apple 目标仅限不带 cinterop 依赖项的情况
采用 x86_64 架构的 Windows (MinGW 工具链)任何受支持的目标(Apple 目标除外)任何受支持的目标,Apple 目标仅限不带 cinterop 依赖项的情况

构建最终二进制文件

要生成最终二进制文件,你只能在 受支持的主机 上为 受支持的目标 进行编译。例如,你不能在 FreeBSD 或运行在 ARM64 架构上的 Linux 机器上进行编译。

在 Linux 和 Windows 上构建 Apple 目标的最终二进制文件也是不可能的。

生成 .klib 构件

通常,Kotlin/Native 允许任何 受支持的主机 为受支持的目标生成 .klib 构件。

然而,在 Linux 和 Windows 上为 Apple 目标生成构件仍然存在一些限制。如果你的项目使用了 cinterop 依赖项(包括 CocoaPods),你必须使用 macOS 主机。

例如,只有在没有 cinterop 依赖项的情况下,你才能在运行于 x86_64 架构的 Windows 机器上为 macosArm64 目标生成 .klib

下一步