Kotlin Multiplatform oder Compose Multiplatform? Dieser Blogbeitrag zeigt dir, welche Lösung für deine Cross-Platform-Entwicklung die beste ist.
Quelle: https://www.jetbrains.com/kotlin-multiplatform/, Zugriff: 14.02.2025
Wie kannst du mit nur einer Codebasis Apps für Android, iOS und mehr entwickeln?
Moderne Cross-Platform-Entwicklung bietet Unternehmen die Möglichkeit, effizient für mehrere Plattformen zu entwickeln – ohne separate Codebasen pflegen zu müssen. Doch welche Technologie ist die beste? Cross-Platform-Frameworks gewinnen immer mehr an Bedeutung, weil sie Unternehmen helfen, Zeit und Ressourcen zu sparen. JetBrains hat mit Kotlin Multiplatform (KMP) eine vielversprechende Lösung entwickelt.
Was ist Kotlin Multiplatform?
Kotlin Multiplatform (KMP) ermöglicht es Entwicklern, Code zwischen verschiedenen Plattformen zu teilen – und dennoch plattformspezifische Implementierungen vorzunehmen. So können logische Komponenten wie Business-Logik einmal geschrieben und mehrfach verwendet werden. Unternehmen wie Netflix, McDonald’s und VMware setzen KMP bereits erfolgreich ein1.
Wo kommt Kotlin Multiplatform zum Einsatz?
KMP eignet sich besonders für:
Mobile Apps (Android & iOS)
Desktop-Anwendungen (Windows, macOS, Linux)
Web-Apps (via WebAssembly oder JavaScript)
Backend-Entwicklung (z. B. mit Kotlin/Native oder Kotlin für die JVM)
Quelle: https://www.jetbrains.com/kotlin-multiplatform/, Zugriff: 14.02.2025
Der große Vorteil von KMP ist die Flexibilität: Entwickler entscheiden selbst, welche Codebestandteile geteilt werden. Während die Business-Logik oft für alle Plattformen genutzt wird, bleibt die UI plattformspezifisch.
Bis zu 100 % Code Sharing ist möglich mit dem neuen Framework Compose Multiplatform.
Quelle: https://www.jetbrains.com/kotlin-multiplatform/
Was ist Compose Multiplatform?
Jetpack Compose2 ist das moderne UI-Toolkit von Google für Android-Apps. Mit Compose Multiplatform (CMP)3 wurde dieses Konzept von Jetbrains auf weitere Plattformen ausgeweitet. So können Entwickler bis zu 100 % ihres Codes für Android, iOS, Web und Desktop wiederverwenden4.
CMP basiert auf KMP und profitiert von dessen vollständiger Plattformunterstützung und Flexibilität.
Quelle: https://www.jetbrains.com/kotlin-multiplatform/
Composables – Die Bausteine der UI
Jetpack Compose setzt auf das deklarative Programmierparadigma:
Du beschreibst die UI durch eine Zustandsbeschreibung, anstatt Schritt für Schritt zu definieren, wie sie aufgebaut wird.
Wiederverwendbare Composables sorgen für ein flexibles Design.
Ein Beispiel: Ein Button kann einfach als Composable erstellt werden, ohne sich um die Plattform-spezifische Implementierung zu kümmern.
Quelle: https://www.jetbrains.com/kotlin-multiplatform/
Wie der Button genau erstellt und angezeigt wird, bleibt dabei verborgen – der Fokus liegt allein auf dem gewünschten Endergebnis: einem Button, der angeklickt werden kann.
Wie funktioniert das Kompilieren mit KMP?
KMP nutzt verschiedene Compiler-Backends, um den Code für unterschiedliche Zielplattformen bereitzustellen. Der gemeinsame Code wird in Kotlin geschrieben, anschließend übernimmt der Kotlin-Compiler die Umwandlung in die jeweilige Plattformtechnologie:
JVM-Backend: Kompiliert Kotlin-Code zu Java-Bytecode, der auf der JVM ausgeführt wird (z. B. für Android oder Server-Anwendungen).
JS-Backend: Übersetzt Kotlin-Code in JavaScript, um ihn in Web-Apps lauffähig zu machen.
Native-Backend:
Für iOS wird der sogenannte Kotlin/Native-Compiler (Native IR Backend) genutzt, der mit Low Level Virtual Machine (LLVM) arbeitet, um native .so-Dateien zu erzeugen. Der Kotlin-Quellcode wird hierbei zunächst in LLVM-Bitcode übersetzt und anschließend in Maschinencode kompiliert, um direkt auf der iOS-Plattform ausgeführt zu werden.
Auch für macOS, Windows und Linux erzeugt Kotlin/Native plattformspezifischen Maschinencode, sodass keine JVM oder JavaScript-Engine erforderlich ist.
WASM-Backend (WebAssembly): Experimentelle Unterstützung für die Kompilierung in WebAssembly, wodurch Kotlin-Code direkt im Browser ausgeführt werden kann.
Quelle: https://kotlinlang.org/docs/k2-compiler-migration-guide.html, Zugriff: 14.02.2025
Dank dieses flexiblen Kompilierungsprozesses kann KMP effizient auf unterschiedlichsten Plattformen eingesetzt werden, während gleichzeitig eine nahtlose Interoperabilität mit plattformspezifischen Technologien gewährleistet wird.
Verschiedene SourceSets in Kotlin Multiplatform
In KMP gibt es verschiedene SourceSets, um plattformspezifischen und gemeinsamen Code zu trennen:
commonMain: Gemeinsame Codebasis für alle Plattformen
androidMain: Android-spezifischer Code
iosMain: iOS-spezifischer Code
desktopMain: Desktop-spezifischer Code
wasmJsMain: Web-spezifischer Code für WebAssembly oder JavaScript
Wie ist es nun möglich, plattformspezifischen Code in der geteilten Codebasis zu verwenden?
Expect-Actual Paradigma
Ein zentrales Konzept in KMP ist das Expect-Actual-Paradigma5, mit dem plattformspezifische Implementierungen in den gemeinsamen Code eingebunden werden können:
In der commonMain-Codebasis wird eine expect-Deklaration definiert.
In den plattformspezifischen SourceSets wird dann eine passende actual-Implementierung bereitgestellt.
Beispiel:
// common Code (commonMain)
expect fun getPlatformName(): String
// android specific implementation (androidMain)
actual fun getPlatformName(): String = „Android“
// iOS specific implementation (iosMain)
actual fun getPlatformName(): String = „iOS“
Kotlin erkennt automatisch, auf welcher Plattform der Code läuft und ruft die entsprechende actual-Funktion auf. Man kann sich das wie ein Interface vorstellen: expect beschreibt die Funktionalität, während actual die plattformspezifische Implementierung darstellt.
Interoperabilität mit nativen Bibliotheken
Ein weiterer großer Vorteil von KMP ist die Interoperabilität mit nativen Bibliotheken. So kann beispielsweise Swift-Code in Kotlin für iOS-Anwendungen integriert werden. Mit Kotlin/Native6 ist es möglich, direkt mit Swift- oder Objective-C-Bibliotheken zu arbeiten.
Diese nahtlose Interoperabilität mit nativen Bibliotheken macht KMP zu einer interessanten Lösung für plattformübergreifende Anwendungen.
Fazit
CMP ist besonders für Entwickler geeignet, die bereits Erfahrung in der Android-Entwicklung mit Jetpack Compose gesammelt haben, da ihnen der Einstieg dank der vertrauten Konzepte und UI-Elemente leichtfällt und sie sich schnell in der Umgebung zurechtfinden. Zum aktuellen Zeitpunkt ist CMP jedoch noch nicht für den professionellen Einsatz geeignet, da die Anzahl der verfügbaren Bibliotheken begrenzt ist und viele Funktionen sich noch im experimentellen Stadium befinden. Sowohl die Community als auch JetBrains arbeiten jedoch aktiv daran, die Plattform weiter auszubauen und die Integration der verschiedenen Plattformen in die Multi-Plattform-Entwicklung zu verbessern. Im Vergleich zu etablierten Frameworks wie Flutter und React Native kann CMP in der plattformübergreifenden UI-Entwicklung noch nicht mithalten.
Dennoch bietet das Konzept der hybriden Entwicklung mit KMP spannende Ansätze, um die native Entwicklung mit nur einer Programmiersprache optimal in geteilte Projekte zu integrieren.
Ausblick
Als Ausblick auf die Zukunft von KMP zeigt die Roadmap7 von JetBrains für 2025 spannende Entwicklungen. Unter anderem unterstützt Google die Entwicklung mit KMP, während der Fokus auf der Veröffentlichung einer stabilen iOS-Version liegt. Zudem wird ein Kotlin-to-Swift-Export eingeführt, um die Interoperabilität mit nativen Bibliotheken zu verbessern. Eine speziell auf KMP ausgerichtete IDE soll die Entwicklererfahrung optimieren, und auch die Dokumentationsqualität wird weiter verbessert, um die Nutzung des Frameworks noch zugänglicher zu machen.
Es bleibt also weiter spannend!
Alternative Frameworks
Für Entwickler, die auf ein etabliertes Framework setzen möchten, das eine vollständige Anwendungsentwicklung mit geteilter Codebasis ermöglicht, sind Frameworks wie Flutter und React Native derzeit die bessere Wahl. Laut einer Statistik von Statista aus dem Jahr 20238 gehören diese Frameworks zu den am häufigsten genutzten mobile Cross-Platform-Lösungen. Sie bieten eine breite Community-Unterstützung sowie umfangreiche Bibliotheken, was die Entwicklung vereinfacht und beschleunigt.
Der Beitrag Cross-Platform-Entwicklung: Kotlin oder Compose Multiplatform? Ein direkter Vergleich erschien zuerst auf Business -Software- und IT-Blog – Wir gestalten digitale Wertschöpfung.