Wie ein Kotlin-Projekt Android, iOS, Web, Wear OS und KI-Agenten abdeckt
Wenn Sie die Fähigkeiten von Kotlin Multiplatform in echtem Code demonstrieren möchten, ist es leicht, sich in komplexer Architektur und Dutzenden von Abstraktionsschichten zu verstricken. John O'Reilly ging einen anderen Weg. Er wählte eine straightforward Aufgabe: eine Liste von Personen in der Umlaufbahn und ISS-Koordinaten anzuzeigen. Das Ergebnis ist ein klares Beispiel dafür, wie ein einzelnes Business-Logic-Modul auf einem Dutzend verschiedener Plattformen funktioniert.
Das Projekt hat es in die offizielle Kotlin-Dokumentation und die Google Dev Library geschafft. Lassen Sie uns aufschlüsseln, wie alles strukturiert ist und warum diese Codebasis ein praktisches Sandbox-Projekt darstellt.
Worum es in dem Projekt geht
Die App ruft Daten von zwei offenen Quellen ab. Die Liste der Astronauten mit Biografien stammt von der The Space Devs API, während die ISS-Koordinaten über die Open Notify API abgerufen werden. Um zu verhindern, dass Clients direkt auf Dienste von Drittanbietern zugreifen, enthält das Repository ein kleines Ktor-Backend.
Die Hauptidee hier ist Code-Deduplizierung. Business-Logik, Netzwerkanfragen, Caching und Datenmodelle werden einmal in einem gemeinsamen Modul common geschrieben. Dieser Code verbindet sich dann mit Clients, die auf die unterschiedlichsten Betriebssysteme und Bildschirme abzielen.
Die Liste der unterstützten Ziele umfasst:
- Android-Smartphones und Homescreen-Widgets mit der Glance API
- iOS-App, erstellt mit SwiftUI
- Smartwatches mit Wear OS
- Desktop-Version über Compose for Desktop
- Web-Client mit Kotlin/Wasm
- Serverseitige Komponente mit Ktor
- MCP-Server für die Verbindung zu KI-Clients
Was unter der Haube des gemeinsamen Moduls steckt
Das Modul common übernimmt den gesamten Boilerplate. Es verwendet Bibliotheken, die Kotlin-Entwicklern vertraut sind:
- Ktor Client für Netzwerkanfragen
- SQLDelight für die lokale Datenbankspeicherung
- Koin für Dependency Injection
- Kotlinx Serialization zum Parsen von JSON
Compose Multiplatform und die SKIE-Bibliothek kümmern sich um die Kommunikation mit der UI. Letztere vereinfacht die Arbeit mit Swift erheblich, indem Coroutinen und Flow in Async-Konzepte übersetzt werden, die iOS-Entwickler verstehen.
class PeopleInSpaceViewModel(
private val peopleInSpaceRepository: PeopleInSpaceRepositoryInterface
) : KMMViewModel() {
val peopleInSpace: StateFlow<List<Assignment>> =
peopleInSpaceRepository.fetchPeopleAsFlow()
.stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
}
Dank dieser Trennung bleiben die Plattform-Clients schlank. Sie kümmern sich nur um das Rendern der UI und Touch-Events.
Von Smartwatches zum Webbrowser
Jeder Client im Repository ist als separates Modul strukturiert. Dies macht es einfach, schnell zu verstehen, wie eine bestimmte Technologie mit dem gemeinsamen KMP-Code integriert wird.
Die Android-App ist mit Jetpack Compose erstellt. Daneben befindet sich das wearApp-Modul, in dem die Oberfläche für runde Uhrbildschirme mit Compose for Wear OS angepasst ist. Außerdem finden Sie dort ein funktionierendes Homescreen-Widget für Android, das mit der Glance API geschrieben wurde.
Für iOS bietet der Autor zwei Wege: eine klassische SwiftUI-Oberfläche oder gemeinsamen Compose-Code. Die Wahl liegt beim Entwickler.
Die Browser-Version ist mit Kotlin/Wasm erstellt. Der Build läuft über eine Standard-Gradle-Task und erzeugt ein funktionierendes Frontend, ohne eine einzige Zeile JavaScript schreiben zu müssen.
Verbindung zu Claude Desktop über MCP
Eine der neuesten Ergänzungen zum Repository ist das mcp-server-Modul. Der Autor implementierte einen Server unter Verwendung des Model Context Protocol mit dem offiziellen Kotlin MCP SDK.
Die Idee ist, dass dasselbe common-Modul mit Business-Logik und der Netzwerkschicht in eine Konsolenanwendung integriert wird. Diese Anwendung stellt Tools für künstliche Intelligenz bereit. Durch Ausführung des lokalen Servers können Sie ihn mit Claude Desktop oder einem anderen Assistenten verbinden.
Die Konfiguration für Claude Desktop sieht folgendermaßen aus:
{
"mcpServers": {
"kotlin-peopleinspace": {
"command": "java",
"args": [
"-jar",
"/path/to/repo/mcp-server/build/libs/serverAll.jar",
"--stdio"
]
}
}
}
Danach hat das neuronale Netz direkten Zugriff auf die Datenabruffunktion und kann Fragen zu Kosmonauten beantworten, indem es aktuelle Informationen aus Ihrem KMP-Code abruft.

Warum Sie sich dieses Repository ansehen sollten
Das PeopleInSpace-Repository ist nicht wegen des Umfangs seines Codes wertvoll, sondern wegen des aktuellen Tech-Stacks. Der Autor aktualisiert ständig die Versionen von Kotlin, Gradle, Compose und zugehörigen Bibliotheken.
Das Projekt ist eine gute Referenz, wenn Sie planen:
- Zu evaluieren, wie viel Code Sie tatsächlich zwischen Android und iOS wiederverwenden können.
- Kotlin/Wasm in der Praxis in einem Browser zu sehen.
- Herauszufinden, wie SKIE beim Übergeben von Datenströmen an Swift funktioniert.
- Zu lernen, wie MCP-Server mit Kotlin erstellt werden.
Um zu beginnen, klonen Sie einfach das Repository, öffnen Sie es in einer neuen Version von Android Studio und führen Sie die gewünschte Gradle-Task aus.
Ähnliche Projekte