Verwenden von Clojure zum Erstellen nativer Android-Apps
Die Entwicklung von Clojure auf der Android-Plattform hat in den letzten Jahren bemerkenswerte Fortschritte gemacht, sodass Entwickler es in vollwertigen Apps wie der Clarity-Tastatur von SwiftKey verwenden können. Hier werden wir den aktuellen Status von Tools überprüfen, die Clojure auf der Android-Plattform unterstützen.
In der Vergangenheit litt Clojure unter Android unter einem langsamen Start, der bei Verwendung von Standard-Upstream-Clojure bis zu 4-10 Mal länger dauern konnte als bei Java. Dieses Problem wird von Skummet behoben, einem Clojure-Fork, der den Clojure-Compiler so optimiert, dass kompakterer, schneller zu ladender Bytecode erzeugt wird. Neben der Bereitstellung eines optimierenden Compilers enthält Skummet auch eine optimierte Version der Laufzeit von Clojure, die vom ersteren erstellt wird.
Skummet zielt darauf ab, maximale Kompatibilität zu gewährleisten, und obwohl es Probleme mit Code geben könnte, der direkt auf Vars
verweist, sollte der meiste Clojure-Code laut Alex Yakushev, dem Schöpfer von Skummet, sofort kompatibel sein.
Insgesamt kann Skummet beim ersten Start einer einfachen Benchmark-App die Ladezeit um das 4-fache verkürzen und die APK-Größe und die Heap-Nutzung um das 2-fache verringern. Laut Adam Clements und Ben Leavett von SwiftKey konnten sie mit Skummet die Ladezeit ihrer Tastatur auf etwa 1,5 bis 2 Sekunden beschränken, und weitere Verbesserungen sind möglich.
Weitere nützliche Tools für die Clojure-Entwicklung unter Android sind unter dem Dachprojekt der Clojure-Android-Initiative zusammengefasst und umfassen:
- lein-droid: ein Leiningen-Plugin, das als Build-Tool für Clojure-Android-Projekte dient und sich mit dem Packen von Ressourcen, dem Erstellen einer APK-Datei, dem Signieren usw. befasst.
- Neko: Ein Toolkit, das einige Teile der Java-API von Android umschließt, um die Verwendung von Clojure idiomatischer zu gestalten.
Zach Oakes, Autor der Nightweb-App für Android, sagt, dass Clojure die Codebasis einer App “schockierend” verkleinern kann, indem es knappe Redewendungen ermöglicht und die Reaktionsfähigkeit der App verbessert, indem es dem Programmierer erleichtert asynchrone Aufgaben ausführen.
Laut den Ingenieuren von SwiftKey kann die Verwendung von Clojure zum Erstellen einer Android-App einen großen Einfluss auf das App-Design haben. Insbesondere im Fall von Clarity Keyboard ermöglichte es die Einführung eines vollständig “ereignisgesteuerten” Designs, das in Verbindung mit der Verwendung einer unveränderlichen Datenstruktur das einfache Speichern und “Wiedergeben” von Benutzeraktionen ermöglicht. Die Verwendung unveränderlicher Daten trug auch dazu bei, eine hochmodulare App zu erstellen und jeden Vorgang standardmäßig asynchron zu machen.