JetBrains hat eine neue Version von Jetpack Compose for Desktop veröffentlicht, einem Open-Source-Framework für die plattformübergreifende UI-Entwicklung.
Wenn Sie irgendeine Art von Entwicklungsarbeit leisten, haben Sie wahrscheinlich schon von JetBrains gehört. Sie sind das Unternehmen hinter der riesigen IDE-Suite, zu der IntelliJ (die Basis für Android Studio), CLion, PhpStorm und viele andere gehören. Sie sind es auch, die es gemacht haben Kotlin, die äußerst beliebte plattformübergreifende Programmiersprache.
Und JetBrains ist wieder dabei. Vor etwas mehr als einem Jahr stellte Google eine neue Layout-Engine für Android namens Jetpack Compose vor. Es ist durchgegangen Seitdem gab es einige große Veränderungen, aber es hat sich zu einer kompetenten (wenn auch immer noch etwas instabilen) Alternative zu den klassischen XML-Layouts von Android entwickelt.
Was hat Jetpack Compose mit JetBrains zu tun? Nun, zum einen ist es in Kotlin geschrieben. Darüber hinaus hat JetBrains im Stillen daran gearbeitet, Compose auf den Desktop-Bereich zu portieren. Es wurde als frühe Entwicklervorschau veröffentlicht und jetzt ist JetBrains bereit, seine Existenz offiziell bekannt zu geben.
Was ist Jetpack Compose?
Ich habe in der Einleitung ein wenig darüber gesprochen, aber ich denke, es verdient eine weitere Erklärung. Wenn Sie schon einmal auf Android entwickelt haben, sind Sie wahrscheinlich mit der Funktionsweise von Layouts vertraut. Zuerst entwerfen Sie Ihr Layout in einer XML-Datei und interagieren dann mit diesem Layout über Java oder Kotlin. Obwohl es funktionsfähig ist, ist es etwas veraltet und die Aufteilung Ihrer Layouts auf mehrere Sprachen kann schwierig zu verwalten sein.
Als Alternative dazu begann Google mit der Entwicklung von Jetpack Compose. Compose ist eine Layout-Engine für Android, die auf Kotlin basiert. Ihr gesamter Layout- und Logikcode befindet sich an einem Ort, was die Interaktivität erheblich erleichtert. Es ist außerdem deklarativ und nicht imperativ wie XML-Layouts.
Der Wechsel von einer imperativen zu einer deklarativen Layout-Engine kann etwas gewöhnungsbedürftig sein, aber Compose ist definitiv eine Verbesserung gegenüber XML, auch wenn es sich noch in einem frühen Stadium befindet.
Jetpack Compose für Desktop
Compose ist also eine schöne Layout-Alternative für native Android-Apps. Aber es ist (normalerweise) nicht plattformübergreifend. Hier kommt JetBrains ins Spiel. Das Unternehmen hat Jetpack Compose auf den Desktop-Bereich portiert und unterstützt Windows, Linux und macOS (sowohl Intel als auch ARM).
Es gibt zwar auch andere Layout-Engines für den Desktop, wie Electron, JavaFX und UWP, aber im Moment ist es ein bisschen chaotisch. Einige sind nicht plattformübergreifend und funktionieren daher nur auf einem bestimmten Betriebssystem. Andere sind technisch gesehen plattformübergreifend, erfordern aber viel Arbeit bei der Verteilung. Und dennoch ist die Arbeit mit anderen nur mühsam, wie zum Beispiel JavaFX.
Jetpack Compose for Desktop hingegen ist relativ einfach zu verwenden, unterstützt die Anzeigeskalierung, verfügt über integriertes Design und ist (fast) vollständig plattformübergreifend. Während Sie noch nicht für alle Distributionen von einem Betriebssystem aus kompilieren können, ist der Code selbst vollständig portierbar. Genau wie bei Android basiert eine gepackte App auf Java, allerdings muss für die Nutzung kein JDK installiert sein.
Kreuzkompatibilität
Da Compose for Desktop noch neu ist, fehlen einige Funktionen. Um Entwicklern dabei zu helfen, diese Einschränkungen zu umgehen, ist Compose for Desktop mit zwei der bekannteren Java-Layout-Engines, JavaFX und Swing, kompatibel. Wenn Sie eine Desktop-App in einer (oder beiden) dieser Engines entwickelt haben, können Sie mit der Umstellung auf Compose beginnen und dabei Ihre aktuelle Codebasis beibehalten.
Android + Desktop
Was ist, wenn Sie Ihre Compose-Android-App auf den Desktop bringen möchten? Nun ja, das kann man (sozusagen) auch machen. Die UI-Elemente Ihrer App können problemlos zwischen Android und Desktop geteilt werden. Sie können nicht alles teilen, aber es erleichtert auf jeden Fall die Entwicklung.
Apple Silicon-Support
Ich habe das oben erwähnt, aber ich werde es noch einmal erwähnen. Der neue Apple Silicon Macs sind ziemlich erstaunlich, aber die Prozessoren basieren auf der ARM-CPU-Architektur, was bedeutet, dass viele macOS-Apps derzeit über den Rosetta 2 x86-Übersetzer laufen. Obwohl Apple bei dieser Übersetzung ziemlich gute Arbeit geleistet hat, laufen native ARM-Programme immer noch besser.
Nun, Jetpack Compose for Desktop unterstützt Apple Silicon nativ. Das bedeutet, dass Sie sich keine Sorgen über Leistungseinbußen durch die Übersetzung oder über zukünftige Unterstützung machen müssen, wenn Apple diese einstellt.
Funktionalität
Es ist also schön und gut, dass JetBrains eine neue Layout-Engine für den Desktop entwickelt hat, aber wer sagt, dass sie besser ist als das, was wir jetzt haben?
Mich.
Ich habe den zum Zeitpunkt des Schreibens dieses Artikels neuesten verfügbaren Build (0.2.0-build132) verwendet, um eine einfache Berechtigungsgewährungs-App für SystemUI Tuner zu erstellen. Da ich mit Compose und deklarativem Design nicht so vertraut bin, war es für mich etwas schwieriger als eine XML-Layout-App, aber ich habe es geschafft. Und es ist viel einfacher zu verwenden als JavaFX.
Während die Theme-Unterstützung (d. h. der dunkle Modus) noch etwas fraglich ist, ist es ziemlich einfach, ein interaktives Layout zu erstellen, und bis auf ein paar Flackern beim Ändern der Fenstergröße funktioniert alles einwandfrei.
Wenn Sie die App ausprobieren möchten, finden Sie den Quellcode unter GitHub. Importieren Sie es einfach mit IntelliJ oder Android Studio und es sollte betriebsbereit sein.
Ich persönlich bin ziemlich begeistert von Jetpack Compose für Desktop. Ich wusste vorher nicht einmal, dass es existiert, aber es ist bereits die Desktop-Layout-Engine meiner Wahl. Weitere Informationen finden Sie unter Jetpack Compose für Desktop-Website oder auf GitHub.
Was denkst du darüber? Lohnt es sich, es auszuprobieren und vielleicht sogar anstelle anderer verfügbarer Frameworks zu verwenden? Lass es mich wissen!
Ausgewählte Bildnachweise: JetBrains auf GitHub