Kotlin/Native — je překladač kódu Kotlin přímo do nativního strojového kódu, pracující bez virtuálního stroje. Na rozdíl od verze JVM používá Kotlin/Native backend LLVM pro generování spustitelných souborů pro iOS, Android NDK, macOS, Windows, Linux a WebAssembly. Tato technologie je základem Kotlin Multiplatform a zajišťuje provádění společného kódu na platformách, kde JVM není k dispozici. Podle JetBrains, 2025 podporuje Kotlin/Native 13 cílových platforem a umožňuje opětovné použití až 90% kódu v projektech KMM.
Hlavní body
Kotlin/Native — je technologie kompilace kódu Kotlin do nativního strojového kódu vyvinutá společností JetBrains. Hlavní rozdíl oproti Kotlin/JVM spočívá v absenci potřeby virtuálního stroje — výsledný spustitelný soubor obsahuje pouze strojový kód a minimální běhové prostředí. To umožňuje spouštět aplikace Kotlin na zařízeních a systémech, kde JVM není podporována, včetně iPhone, Apple Watch a vestavěných systémů.
Historie Kotlin/Native začala jako experimentální překladač, který byl v roce 2017 integrován do hlavní větve Kotlin. V roce 2019 byla na KotlinConf oznámena podpora iOS jako cílové platformy, což se stalo zlomovým bodem pro mobilní vývoj. Od verze Kotlin 1.9.20 dosáhl překladač Kotlin/Native stability a je ve výchozím nastavení součástí Kotlin Multiplatform.
Klíčovou vlastností Kotlin/Native je použití společné mezilehlé reprezentace IR, která je kompilována do strojového kódu pro každou platformu zvlášť. To zajišťuje jednotné frontend kompilace pro všechny backendy Kotlin: JVM, JS a Native.
Kompilace Kotlin/Native prochází několika fázemi transformace. Zdrojový kód v Kotlin je nejprve převeden do interní reprezentace, poté optimalizován a předán backendu LLVM pro generování strojového kódu. Poslední fází je propojení s běhovými knihovnami a vytvoření spustitelného souboru nebo dynamické knihovny.
Architektura zahrnuje tři klíčové komponenty: frontend (parsování a kontrola typů), generátor IR (vytváření mezilehlé reprezentace) a backend LLVM (generování strojového kódu). Toto schéma je podobné přístupu používanému v překladačích Clang pro C++ a Rust.
// Kompilace Kotlin/Native přes příkazový řádek
kotlinc-native hello.kt -o hello -opt
// Sestavení pro iOS arm64 přes Kotlin Multiplatform
./gradlew :shared:linkDebugFrameworkIosArm64
Pro správu paměti používá Kotlin/Native vlastní Memory Manager založený na počítání referencí s cyklickým detektorem. Od Kotlin 1.7.20 funguje nový správce paměti ve výchozím nastavení a nevyžaduje anotace @ThreadLocal nebo @SharedImmutable. Sběrač odpadu pracuje bez zastavování vláken, což je kritické pro iOS, kde systém může při dlouhodobém blokování hlavního vlákna aplikaci násilně ukončit.
Proces kompilace je rozdělen do pěti fází: parsování (analýza zdrojového kódu), sémantická analýza (kontrola typů a rozlišení názvů), generování IR (vytváření mezilehlé reprezentace), optimalizace (zjednodušení a odstranění mrtvého kódu) a generování kódu prostřednictvím LLVM. Každá fáze může být prováděna paralelně pro různé moduly, což urychluje sestavování velkých projektů.
| Fáze | Doba trvání | Výsledek |
|---|---|---|
| Parsování | ~10% času | AST strom zdrojového kódu |
| Sémantická analýza | ~20% času | Typizované AST |
| Generování IR | ~15% času | Kotlin IR (Intermediate Representation) |
| Optimalizace | ~25% času | Optimalizované IR |
| Generování kódu LLVM | ~30% času | Strojový kód + spustitelný soubor |
Kotlin/Native podporuje 13 cílových platforem rozdělených do kategorií. Pro mobilní vývoj jsou k dispozici iOS (arm64), Android (arm32, arm64, x86_64) a watchOS. Desktopové platformy zahrnují macOS (x64, arm64), Windows (mingw x64) a Linux (x64, arm64, arm32). Pro serverový a vestavěný vývoj jsou k dispozici WebAssembly a Kotlin/Native na LLVM bez operačního systému (standalone). Každá platforma vyžaduje samostatný framework nebo knihovnu na výstupu.
Pro iOS Kotlin/Native generuje univerzální framework (.framework), který lze připojit k projektu Xcode. Pro Android NDK jsou vytvářeny nativní knihovny .so, které lze volat přes JNI. Platforma watchOS je podporována od Kotlin 1.6.0 a tvOS od verze 1.7.0. Každá architektura vyžaduje samostatné sestavení, ale Kotlin Multiplatform tento proces automatizuje pomocí pluginu Gradle.
macOS a Linux se používají pro vývoj nativních desktopových aplikací v Kotlin pomocí frameworku Compose Multiplatform. Platforma Windows (MinGW) je podporována od Kotlin 1.3.70 a umožňuje vytváření aplikací pro Windows bez instalace JVM. Pro serverový vývoj lze Kotlin/Native použít v prostředích, kde JVM není k dispozici, například v Docker kontejnerech s minimálním obrazem založeným na scratch nebo Alpine.
| Kategorie | Platforma | Architektura |
|---|---|---|
| Mobilní | iOS | arm64, simulátor (x64, arm64) |
| Mobilní | Android NDK | arm32, arm64, x86, x86_64 |
| Nositelné | watchOS | arm64, simulátor (x64) |
| Desktop | macOS | x64, arm64 |
| Desktop | Windows | mingw x64 |
| Desktop | Linux | x64, arm64, arm32 |
iOS je hlavní cílovou platformou Kotlin/Native v kontextu KMM. Překladač vytváří iOS framework obsahující veškerý společný kód, který je pak připojen k projektu Xcode. Framework podporuje jak statické, tak dynamické propojení. Kotlin/Native generuje Objective-C obálky pro třídy a funkce Kotlin, což zajišťuje přímou integraci s kódem v Swift a Objective-C.
Integrace s iOS vyžaduje konfiguraci Xcode pro připojení generovaného frameworku. Kotlin Multiplatform automatizuje tento proces pomocí úlohy embedAndSignAppleFrameworkForXcode, která se spouští z Xcode Build Phases. Pro ladění podporuje Kotlin/Native breakpointy v kódu společného modulu při spuštění aplikace na iOS simulátoru.
// Kód Kotlin zkompilovaný do iOS frameworku
package com.itsectr.shared
class GreetingProvider {
fun createGreeting(): String {
return "Hello from Kotlin/Native!"
}
fun formatVersion(major: Int, minor: Int): String {
return "v$major.$minor"
}
}
Interop s iOS kódem funguje oběma směry. Kotlin/Native generuje Objective-C hlavičky pro třídy Kotlin, které jsou automaticky dostupné ze Swiftu. Zpětnou vazbu zajišťuje anotace @ObjCName pro export funkcí Kotlin pod zadaným názvem Objective-C. Kolekce Kotlin se automaticky převádějí na NSArray a NSDictionary a korutiny Kotlin jsou zabaleny do Combine publishers prostřednictvím knihovny SKIE. Pro práci s iOS frameworky z Kotlin se používá cinterop — nástroj pro generování vazeb Kotlin na Objective-C hlavičky.
Pro zahájení práce s Kotlin/Native je vyžadována konfigurace build.gradle.kts s uvedením pluginu Kotlin Multiplatform a cílových platforem. Podívejme se na minimální konfiguraci pro projekt KMM s podporou iOS a Android.
plugins {
kotlin("multiplatform") version "2.0.21"
}
kotlin {
iosArm64()
iosSimulatorArm64()
sourceSets {
commonMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
iosMain.dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")
}
}
}
Po konfiguraci sestavení lze přidat kód závislý na platformě. Kotlin/Native poskytuje přístup k funkcím iOS prostřednictvím obálek Kotlin. Například získání UUID zařízení na iOS vyžaduje volání NSUUID z Foundation.
import platform.Foundation.NSUUID
fun getDeviceId(): String {
return NSUUID().UUIDString()
}
fun currentTimestampMillis(): Long {
return (platform.Foundation.NSDate().timeIntervalSince1970 * 1000).toLong()
}
Pro generování iOS frameworku se používá úloha Gradle linkDebugFrameworkIosArm64 nebo linkReleaseFrameworkIosArm64 pro produkci. Po sestavení se framework nachází v build/bin/iosArm64/debugFramework/. Připojení k projektu Xcode se provádí přes Pods Podfile nebo přidáním frameworku do sekce General → Frameworks, Libraries and Embedded Content.
// Sestavení release frameworku pro iOS arm64
./gradlew :shared:linkReleaseFrameworkIosArm64
// Sestavení univerzálního frameworku x86_64 + arm64
./gradlew :shared:linkReleaseFrameworkIosX64 \
:shared:linkReleaseFrameworkIosArm64
// Vytvoření XCFramework pro App Store
./gradlew :shared:assembleReleaseXCFramework
Kotlin/Native a Kotlin/JVM se liší architekturou, výkonem a oblastí použití. Kotlin/JVM kompiluje kód do bytekódu spouštěného na JVM, což poskytuje přístup k obrovskému ekosystému knihoven Java, ale vyžaduje nainstalovaný virtuální stroj. Kotlin/Native generuje spustitelný soubor bez externích závislostí, ale s omezenějším ekosystémem knihoven.
Výkon počátečního času Kotlin/Native je vyšší, protože není vyžadováno načítání JVM. Podle benchmarků JetBrains se aplikace Hello World na Kotlin/Native spouští za 0.003 sekundy, zatímco Kotlin/JVM potřebuje 0.5–1 sekundu pro načtení virtuálního stroje. Velikost spustitelného souboru Kotlin/Native však může být 2–3krát větší kvůli zahrnutému běhovému prostředí.
| Charakteristika | Kotlin/Native | Kotlin/JVM |
|---|---|---|
| Cílové platformy | iOS, macOS, Windows, Linux, WebAssembly, embedded | Servery, Android, desktop (JVM) |
| Závislosti | Bez běhového prostředí (samostatný) | Vyžaduje JVM (JDK/JRE) |
| Doba spuštění | ~3 ms | ~500–1000 ms |
| Ekosystém | Omezený (Kotlin + Interop) | Plný (Kotlin + Java + Android SDK) |
| Velikost binárky | ~1–5 MB (s během) | ~100–500 KB (JAR) |
Volba mezi Kotlin/Native a Kotlin/JVM závisí na cílové platformě. Pokud je projekt zaměřen na iOS nebo vyžaduje minimální spotřebu zdrojů, je Kotlin/Native jedinou možností. Pro vývoj Android zůstává Kotlin/JVM standardem, i když Kotlin/Native se používá pro komponenty NDK, kde je vyžadován nativní výkon. V multi-platformních projektech Kotlin Multiplatform kombinuje oba přístupy: společný kód je kompilován přes Kotlin/Native pro iOS a přes Kotlin/JVM pro Android.
Často kladené otázky
Kotlin/Native kompiluje kód do nativního strojového kódu bez virtuálního stroje, zatímco Kotlin/JVM do bytekódu vyžadujícího nainstalovanou JVM. Kotlin/Native se používá pro iOS, vestavěné systémy a WebAssembly, Kotlin/JVM pro Android a servery.
Ano, Kotlin/Native lze použít jako samostatný překladač pro vytváření konzolových aplikací, nativních pluginů nebo knihoven pro libovolnou podporovanou platformu. KMM pouze zjednodušuje organizaci multi-platformního kódu.
Memory Manager Kotlin/Native používá počítání referencí s automatickým cyklickým detektorem. Od Kotlin 1.7.20 sběrač odpadu nevyžaduje anotace @ThreadLocal a pracuje bez zastavování hlavního vlákna iOS.
Prostřednictvím cinterop jsou dostupné všechny iOS frameworky: Foundation, UIKit, CoreData, CoreBluetooth, MapKit a stovky dalších. JetBrains poskytuje hotové vazby pro standardní iOS knihovny v rámci Kotlin/Native.
Pro ladění se používá Xcode s připojeným Kotlin/Native frameworkem. Breakpointy v kódu Kotlin fungují při spuštění na iOS simulátoru. Pro zařízení je vyžadováno sestavení Debug a Apple vývojářský profil.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také