arrow arrow--cut calendar callback check chevron chevron--large cross cross--large download filter kununu linkedin magnifier mail marker media-audio media-blog media-video menu minus Flieger phone play plus quote share youtube

Kotlin Multiplatform – Booster für moderne Cross-Platform-Entwicklung?

Native App-Entwicklung ist aus technologischer Sicht nach wie vor der Goldstandard, zum Beispiel wenn es um Performance, die neusten Platform-APIs oder um den Zugriff auf native Hardware-Elemente (Kamera, Sensoren etc.) geht. Aber auch ein Cross-Platform-Ansatz, bei dem mit einer einzigen Codebasis Apps für mehrere Plattformen erstellt werden, kann Vorteile bieten, zum Beispiel die Einsparung von Kosten und/oder organisatorischem Aufwand sowie eine schnellere Entwicklungszeit. Es gibt verschiedene Tools, die die Cross-Platform-Entwicklung unterstützen, darunter Kotlin Multiplatform, Flutter und React Native. Die erhofften Vorteile durch Cross-Platform-Entwicklung kommen aus meiner Sicht als Android Developer besonders mit KMP zum Tragen, denn ich muss mir im Gegensatz zu Flutter oder React Native kein neues Framework aneignen, sondern kann auf meiner Kotlin-Expertise aufbauen.

Was ist Kotlin Multiplatform (KMP)?

Kotlin Multiplatform (KMP) ist eine der neuesten Technologien im Bereich der Cross-Platform-Entwicklung und wurde von JetBrains entwickelt. Mit KMP können Apps für Android, iOS, Desktop (Windows, Linus, MacOS) und Web (obwohl manche Platforms noch in Alpha- oder Betastages sind) entwickelt werden. Nach dem neuesten Release haben wir uns intensiv mit dieser Technologie auseinandergesetzt und möchten hier unsere Erkenntnisse teilen.

Vorteile von KMP gegenüber anderen cross-platform Frameworks
Quelle: https://kotlinlang.org/docs/multiplatform.html

Vorteile von Kotlin Multiplatform gegenüber den anderen Crossplatform Frameworks

  • Kombination mit nativem Code: Kotlin Multiplatform-Code kann nahtlos mit nativem Android- und iOS-Code kombiniert werden. Das ermöglicht es, flexibel zu entscheiden, wie viel Code geteilt wird – sei es die Benutzeroberfläche, die Business-Logik oder ein einzelnes Modul. Mit anderen Tools wäre dies entweder unmöglich oder deutlich schwieriger.
  • Einfache Integration von System-Features: Systemfunktionen wie GPS oder Kamera lassen sich durch die Kombination mit nativem Code einfacher einbinden.
  • Gradle-Unterstützung: Kotlin Multiplatform unterstützt Gradle, was z. B. die Verwaltung von Dependencies und das Bauen der App vereinfacht.
  • Wiederverwendung von bestehendem Code: Bei der Migration eines bestehenden nativen Projekts zu Kotlin Multiplatform kann oft ein Großteil des bereits geschriebenen Android Codes mit nur wenigen Anpassungen wiederverwendet werden.
  • Vertrautheit der Developer: Kotlin ist die bevorzugte Sprache für die native Android-Entwicklung, sodass viele Entwickler*innen bereits mit Kotlin vertraut sind und sich nicht komplett in eine neue Technologie einarbeiten müssen.
  • Ähnlichkeiten zwischen Kotlin und Swift: Kotlin und Swift haben viele konzeptionelle und syntaktische Ähnlichkeiten, was es iOS Developern erleichtert (je nach Wunsch und Bedarf), sich in den gemeinsamen Code einzuarbeiten und mitzuwirken.
  • Flexibilität bei der Migration der bestehenden nativen Apps: Bei der Umstellung von nativen Apps bietet KMP die Möglichkeit, diese schrittweise durchzuführen. Man kann dabei auch entscheiden, welche Teile nativ bleiben sollen. Außerdem bedeutet es, dass man eine Migration durchführen kann, ohne die Weiterentwicklung der Apps stoppen zu müssen.
  • Wachsende Anzahl der Libraries: Es eignen sich immer mehr Kotlin Libraries für KMP, auch Google macht aktuell mehr und mehr Libraries Multiplatform-ready.
Continuous Inspiration #4

KMP: Eine Frage der Perspektive?

Trotz syntaktischer Ähnlichkeiten von Swift und Kotlin: KMP ist vor allem für Android Developer ein Heimspiel - oder? Dieser und anderen Fragen gehen iOS Developer Konstantin und Android Developer Dimitri in Folge vier unseres Podcasts Continuous Inspiration nach.

Welche Projekte profitieren von KMP?

Ob ein Projekt besser nativ oder cross-platform entwickelt wird, hängt von verschiedenen Faktoren ab. Wir haben uns angeschaut, für welche Projekte Kotlin Multiplatform das passende Framework ist und einige wichtige Schritte identifiziert, die für die Evaluierung und Umsetzung entscheidend sind:

Bewertung

Zunächst sollten folgende Fragen beantwortet werden:

  • Was sind die Hauptanwendungsfälle der App?
  • Handelt es sich um eine bestehende App oder um eine Neuentwicklung?
  • Welcher Tech Stack wird derzeit in der Organisation verwendet?
  • Welche Plattformen sind für das Projekt relevant? Soll die App auf Android, iOS, Desktop oder Web laufen?
  • Müssen die Apps auf den verschiedenen Plattformen identisch sein oder dürfen (oder müssen) sie sich unterscheiden?
  • Wie viele Plattform-APIs müssen genutzt werden?
  • Was soll durch den Einsatz von Cross-Platform-Entwicklung erreicht werden?
  • Stehen bereits Entwickler*innen zur Verfügung? Ist abzusehen, dass sie verfügbar sein werden? Falls ja: Welche Erfahrung haben sie?

Abhängig von den Projektzielen und den gegebenen Umständen kann es sein, dass Cross-Platform-Entwicklung nicht geeignet ist oder dass ein anderes Tooling bevorzugt werden sollte. KMP ist insbesondere dann besonders interessant, wenn ohnehin schon eine Android App und Kotlin Know How vorhanden sind, oder wenn man einen nativen Projekt ohne Entwicklungsstopp in die Cross-Platform umwandeln möchte. Auch wenn man aus Businessgründen eine eher ungewöhnliche Plattform-Kombination hat (wie z. B. Android und Desktop) kann man mit Kotlin Multiplatform relativ problemlos mit dieser Situation umgehen. Auch für Fälle, in denen man grundsätzlich native Entwicklung bevorzugt, aber beispielsweise eine komplexe Fachlogik hat, die im Client implementiert werden muss, ist KMP ein sehr gutes Tool, weil man genau diesen komplexen Teil zwischen den Plattformen sharen kann.

Analyse

Bei einem Projekt mit einer bereits vorhandenen App sollten folgende Aspekte berücksichtigt werden:

  • Wie ist die Architektur der App auf den unterschiedlichen Plattformen aufgebaut?
  • Wie viel muss refaktoriert werden, um Kotlin Multiplatform einsetzen zu können?
  • Gibt es bereits Code-Teile, die ohne großen Aufwand zu Kotlin Multiplatform migriert werden können?

Wenn z. B. die nativen Apps ähnlichen Architektur-Patterns folgen, wird die Migration logischerweise einfacher. Hat man dagegen eine Legacy Codebase, die nicht gut modularisiert ist, dann wird man vor der Umstellung auf KMP mehr Refactoring durchführen müssen.

Konzeption

In diesem Schritt sollten folgende Fragen geklärt werden:

  • Welche Architektur passt am besten zu den Anwendungsfällen und den betroffenen Plattformen?
  • Wie viel Code wird geteilt? Welche Teile der App eignen sich am besten für die Cross-Platform-Entwicklung?
  • Wie sollte das Team zusammengesetzt sein? Welche Entwickler werden benötigt?
  • Wie sollten die Pipelines konfiguriert werden?
  • Wie werden die Apps auf den verschiedenen Plattformen veröffentlicht? Welche Voraussetzungen müssen dafür erfüllt werden?

Kotlin Multiplatform schreibt keine Architektur vor, wenn man aber Multiplatform Code mit dem nativen Code kombinieren möchte, braucht man in der Regel eine modulare, entkoppelte Architektur. Wenn man die komplette Codebase sharen möchte, sind nur die Kotlin-Entwickler*innen notwendig, möchte man dagegen Teile der App nativ gestalten, muss die Teamzusammensetzung anders geplant werden.

Inzwischen gibt es zahlreiche nützliche Bibliotheken für Kotlin Multiplatform, die problemlos eingesetzt werden können. Einige davon sind bereits als etablierte Lösungen für bestimmte Entwicklungsprobleme anerkannt, z. B. Koin für Dependency Injection oder Ktor für die Server-Kommunikation. Hier kann man sich über weitere Libraries informieren.

Fazit

Für bestimmte Problemstellungen kann der Einsatz von Cross-Platform-Entwicklung sehr vorteilhaft sein. Dabei bietet KMP gegenüber der anderen Cross-Platform-Tools erhebliche Vorteile, insbesondere wenn bestehende native Apps in eine Multiplatform-Anwendung umgewandelt werden sollen, bereits eine Kotlin-Codebasis und Kotlin-Entwickler*innen vorhanden sind oder wenn viele Plattform-APIs genutzt und mit nativem Code kombiniert werden müssen. Da Kotlin Multiplatform aktuell noch ein neues Tool für die Cross-Platfom-Entwicklung ist, wird das wahrscheinlich mit der Zeit mehr Relevanz bekommen und sowohl rein nativer Entwicklung, als auch anderen Cross-Platform-Tools Konkurrenz machen.