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.
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.
ProGuard-Support zur Codeoptimierung
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:
Neue Maus- und Keyboard-APIs
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)