Skip to content

Kotlin/Native 支援的目標與主機

本文件說明 Kotlin/Native 編譯器支援哪些目標與主機。

我們可以隨時調整支援的目標與主機清單、層級數量及其特性。

目標層級

Kotlin/Native 編譯器支援多種不同的目標,但對這些目標的支援程度各不相同。 為了釐清這些程度,我們根據編譯器對目標的支援完善程度將其分為幾個層級。

層級表格包含以下欄位:

  • Gradle 目標名稱 是用於 Kotlin 多平台 Gradle 外掛程式中以啟用該目標的 目標名稱

  • 目標三元組 是根據 <architecture>-<vendor>-<system>-<abi> 結構定義的目標名稱,這是 編譯器常用的命名方式

  • 執行測試 表示該目標是否允許使用者在 Gradle 和 IDE 中開箱即用地執行測試(請勿與為目標本身執行的 CI 測試混淆)。

    這僅在特定目標的原生主機上可用。例如,您只能在 macOS ARM64 主機上執行 macosArm64iosArm64 測試。

第 1 層級

  • 該目標在 CI 上定期進行測試,以確保能夠編譯與執行。
  • 我們提供編譯器版本之間的原始碼與 二進位相容性
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 層級

  • 該目標在 CI 上定期進行測試以確保能夠編譯,但可能不會自動測試其是否能夠執行。
  • 我們盡力提供編譯器版本之間的原始碼與 二進位相容性
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 Silicon (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

接下來?