Cross-Plattform-Entwicklung: Compose Multiplatform 1.2 verkleinert Bundle-Größen

Das Kotlin-Framework für Desktop-, Android- und Web-UIs kann nun mit dem Open-Source-Tool ProGuard umgehen. Es soll unter anderem für kleinere Bundles sorgen.

In Pocket speichern vorlesen Druckansicht

(Bild: Joyseulay/Shutterstock.com)

Lesezeit: 2 Min.

Der Softwarehersteller JetBrains hat Compose Multiplatform in Version 1.2 veröffentlicht. Das Minor Release des Cross-Plattform-UI-Frameworks hat einige neue Features an Bord. Dazu zählen neue APIs für Maus und Keyboard, Online-Updates und eine neue Fokus-Verwaltung sowie Support für das Open-Source-Werkzeug ProGuard.

Das noch junge Framework hat im Dezember 2021 die stabile Version 1.0 erreicht. Es weitet den deklarativen Ansatz von Googles Android-UI-Toolkit Jetpack Compose plattformübergreifend auf Desktop-, Web- und Android-Anwendungen aus und nutzt die Programmiersprache Kotlin. Das neue Release ist mit der aktuellen Sprachversion Kotlin 1.7.20 kompatibel.

Im neuen Release kann Compose Multiplatform erstmals mit ProGuard umgehen. Das quelloffene Tool zum Kürzen von Java- und Kotlin-Code soll sowohl die Performance erhöhen als auch die Bundle-Größe einer Anwendung reduzieren. Der Performancegewinn entsteht durch das Entfernen unnötiger Funktionsaufrufe oder Objektallokationen, und optional kann ProGuard auch Obfuscation auf den Code anwenden.

Laut Angaben von JetBrains hat der Einsatz von ProGuard bei Beispielanwendungen die Größe der finalen Distribution deutlich verkleinert, etwa bei Codeviewer:

Verkleinerte Codeviewer-Distribution dank des ProGuard-Einsatzes mit Compose Multiplatform 1.2

(Bild: JetBrains)

Die experimentellen APIs für das Verwenden von Maus und Keyboard erhalten Zuwachs durch zwei neue Modifier: Modifier.onClick soll eine fein abgestufte Kontrolle über den Umgang jeglicher Mausklicks unter Verwendung von Callbacks bieten. Es löst das nun als deprecated (veraltet) geltende Modifier.mouseClickable ab und nimmt mittels PointerMatcher weitere Einschränkungen an, etwa die Art des Klicks oder die verwendete Maustaste.

Zusätzlich lassen sich die Callbacks konditional auf spezifische Keyboard-Modifier-Tasten beschränken: Mit dem Lambda-Parameter keyboardModifiers kann definiert werden, welche Tasten Nutzer während des Klicks drücken müssen:

Box(modifier = Modifier.size(200.dp).background(Color.Yellow)
   .onClick(
       matcher = PointerMatcher.mouse(PointerButton.Secondary), // Right Mouse Button
       keyboardModifiers = { isAltPressed }, // accept clicks only when Alt pressed
       onLongClick = { // optional
           println("Long Click with secondary button and Alt pressed")
       },
       onDoubleClick = { // optional
           println("Double Click with secondary button and Alt pressed")
       },
       onClick = {
           println("Click with secondary button and Alt pressed")
       }
   )
   .onClick { // onClick with all default parameters
       println("Click with primary button (mouse left button)")
   }
) {
   Text(text = "Box with onClick", modifier = Modifier.align(Alignment.Center))
}

Neu ist auch der Modifier onDrag. Damit lassen sich Callbacks spezifizieren, die auf Events aufgerufen werden, die das Ziehen der Maus betreffen. Auch onDrag kann mit PointerMatcher umgehen, um weitere Einschränkungen festzulegen.

Die Neuerungen im Framework beschreibt der JetBrains-Blog im Detail. Für den Einstieg in Compose Multiplatform steht auf GitHub ein Tutorial bereit.

(mai)