Kotlin Multiplatform (KMP)
Dauer: 45 Minuten
- Infos zu KMP
Ziel: Motivation und Einstieg in KMP
Kotlin Multiplatform (KMP) ist ein Framework zur plattformübergreifenden Entwicklung von Apps mit Kotlin. Ursprünglich gedacht für die gemeinsame Nutzung von Geschäftslogik und anderen Teilen des Codes zwischen verschiedenen Plattformen wie Android und iOS, können inzwischen auch komplette Apps inklusive UI mit KMP entwickelt werden. Somit kann KMP als vollständiges Framework zur plattformübergreifenden App-Entwicklung angesehen werden.
Dahinter steckt Jetbrains aber auch Google unterstützt offiziell KMP, wie an verschiedenen Stellen in der Android-Dokumentation zu sehen ist.
Für die UI-Entwicklung wird Compose Multiplatform verwendet, das auf dem zuvor besprochenen Compose für Android aufbaut und es ermöglicht, UI-Komponenten plattformübergreifend für Android, iOS, Web und Desktop zu erstellen. Im folgenden verwenden wir die Bezeichnung KMP für Koltin Multiplatform in dem Sinne, dass Compose Multiplatform für die UI verwendet wird.
- KMP allgemein: https://www.jetbrains.com/kotlin-multiplatform/
- Compose Multiplatform: https://www.jetbrains.com/compose-multiplatform/
Setup in Android Studio
KMP-Projekte lassen sich ähnlich wie native Android-Projekte mit Android Studio entwickeln. Das KMP-Plugin für Android Studio ermöglicht die Erstellung von Apps basierend auf KMP-Templates, und wird auf macOS benötigt, um die App unter macOS auf einem iPhone-Simulator auszuführen
Stand Oktober 2025: das KMP-Plugin wird nur auf macOS unterstützt. Auf Windows/Linux können wir trotzdem mit Android Studio KMP-Apps entwickeln.
Webseite des KMP-Plugins: https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform
App erstellen
Wir erstellen eine KMP-App namens TodosKMP
.
- macOS: Neues Projekt mit Template „Kotlin Multiplatform“ erstellen.
- Windows/Linux: KMP-Projekt im Web erstellen (https://kmp.jetbrains.com ), herunterladen und in Android Studio öffnen.
Offizielle Anleitung: https://www.jetbrains.com/help/kotlin-multiplatform-dev/quickstart.html
App starten
Die Android-Version der App kann wie gewohnt in Android Studio auf einem Emulator oder einem physischen Gerät gestartet werden.
Um die iOS-Version der App zu starten ist ein Mac mit Xcode erforderlich. → auf Wunsch vorführen.
Weitere Infos: https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-create-first-app.html#run-your-application
Grundlegende Konzepte erklären wir an dem Code, der für uns generiert wurde. Dies ist in der Regel eine kleinere App. Vieles ist sehr ähnlich wie in der nativen Android-Entwicklung mit Kotlin und Jetpack Compose.
Projektstruktur und Ausgangscode
In einer KMP-App liegt der plattformübergreifende Code unter composeApp/src/commonMain
.
Für plattformspezifischen Code gibt es entsprechend eigene Ordner.
Die MainActivity
in composeApp/src/androidMain/
wird nicht angepasst, stattdessen
fügen wir unsere Änderungen in der Datei App.kt
in composeApp/src/commonMain/
durch.
In App.kt
sehen wir u.a., dass das MaterialTheme
anstatt eines
eigenen Themes verwendet wird (wie es in der Android-App der Fall war).
Wir werden nun den Code der zuvor gebauten Android-App TodosAndroid
in die KMP-App TodosKMP
kopieren und anpassen.
Android-Code in die KMP-App kopieren
Wir kopieren den Code der zuvor gebauten Android-App TodosAndroid
in
die KMP-App:
- In
commonMain
erstellen mir zwei Verzeichnisse bzw.data
undui
. - Dann kopieren wir den Code aus
ui
vonTodosAndroid
(die DateienAddTodoDialog
undTodosViewModel
) unddata
(Todo
) in die entsprechenden Verzeichnisse der KMP-App untercommonMain
. - Danach müssen wir die
package
-Deklarationen und dieimports
in den kopierten Dateien anpassen.
TODO 2026: Sollen wir zunächst Support für Room in der KMP-App einbauen oder gehen wir in der Commit-Historie zurück, um den Code noch ohne Room zu migrieren?
Orientierung an der Beispiel-App von 2025 oder neu Docs berücksichtigen? Siehe https://github.com/behrends/TodosKMP2025
UI-Code übernehmen und anpassen
Aus der MainActivity
in TodosAndroid
kopieren wir die folgenden Funktionen bzw. Composables:
TodosApp
TodoItem
TodoList
und fügen diese in App.kt
der KMP-App TodosKMP
ein.
Wir löschen das bestehende App
der KMP-App und ändern die kopierte TodosApp
in App
.
Außerdem stellen wir in der kopierten App das Theme auf MaterialTheme
um.
Danach müssen wir die imports anpassen bzw. mit Alt-Enter
hinzufügen.
Für die Verwendung des ViewModels (TodosViewModel
) ändern wir die
Funktionsdeklaration von App
:
@Composable
fun App(vm: TodosViewModel = viewModel { TodosViewModel() }) {
// Rest wie gehabt
}
Ressourcen wie Vector-Drawables (Icons) müssen in KMP anders eingebunden werden. Stattdessen stellen wir die Icons im FAB um:
FloatingActionButton
→ ExtendedFloatingActionButton
um das Icon loszuwerden bzw.
durch Text zu ersetzen (Text("Neues Todo")
).
Infos zu Ressourcen: https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-resources.html
TODO: was ist mit den Navigations-Icons? (siehe Navigation-Abschnitt unten)
Data
Die Beispiel-App von 2025 zeigt, wie KMP mit Room in Android und iOS verwendet werden kann: https://github.com/behrends/TodosKMP2025
Vorgehen wie in diesem Codelab: https://developer.android.com/codelabs/kmp-migrate-room
Ressourcen zum Selbststudium:
- Android Docs: https://developer.android.com/kotlin/multiplatform/room
- Codelab: https://developer.android.com/codelabs/kmp-migrate-room
- Sample App: https://github.com/android/kotlin-multiplatform-samples
Navigation
Todos
- Wie in Android, sobald Navigation 3 stabil ist?
- Code aus Android kopieren und anpassen (früher? s.o.)
Support für Navigation 3 in KMP: https://youtrack.jetbrains.com/issue/CMP-7646/Support-Navigation-3-for-Compose-Multiplatform
- https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-navigation.html
- https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-navigation-routing.html
Links
KMP entwickelt sich ständig weiter und durch den Support von Google wird KMP zum echten Konkurrenten zu anderen plattformübergreifenden Frameworks wie Flutter oder React Native.
Die bisherigen Inhalte zu Android und Compose lassen sich direkt in KMP-Apps anwenden. Daher sind auch die Lernressourcen zu Kotlin und Android in den vorherigen Seiten relevant.
Einstiegsseiten zu KMP bei Jetbrains, Google und Kotlin:
- Docs von Jetbrains: https://www.jetbrains.com/kotlin-multiplatform/
- Android Developer Docs: https://developer.android.com/kotlin/multiplatform
Codelabs:
- https://developer.android.com/codelabs/kmp-get-started
- https://developer.android.com/codelabs/kmp-migrate-room
- Todo: mehr?
Sample Apps:
- https://www.jetbrains.com/help/kotlin-multiplatform-dev/multiplatform-samples.html
- https://github.com/android/kotlin-multiplatform-samples/
- https://github.com/JetBrains/compose-multiplatform/ → Beispiel-Apps unter
examples/
Wer mit KMP arbeiten möchte, sollte darauf achten, ob die benötigten Bibliotheken (z.B. für Datenbank, Netzwerk, usw.) in KMP funktionieren. Dazu eine hilfreiche Sammlung: https://github.com/terrakok/kmp-awesome