Använda Clojure för att bygga inbyggda Android-appar
Clojure-utvecklingen på Android-plattformen har utvecklats anmärkningsvärt under de senaste åren, vilket gör det möjligt för utvecklare att använda den i fullfjädrade appar som SwiftKeys Clarity-tangentbord. Här kommer vi att granska den aktuella statusen för verktyg som stöder Clojure på Android-plattformen.
historiskt sett har Clojure på Android drabbats av långsam start, vilket kan vara upp till 4-10 gånger längre än Java när man använder standard uppströms Clojure. Det här problemet åtgärdas av Skummet, en Clojure-gaffel som optimerar Clojures kompilator så att den producerar mer kompakt, snabbare att ladda bytekod. Förutom att tillhandahålla en optimerande kompilator innehåller Skummet också en optimerad version av Clojures runtime som är byggd av den tidigare.
Skummet syftar till att säkerställa maximal kompatibilitet och även om det kan finnas problem med kod som bygger på att referera Vars
direkt, bör de flesta Clojure-kod vara kompatibla ur lådan, enligt skummets skapare Alex Yakushev.
sammantaget kan Skummet få en 4x minskning av laddningstiden på en enkel benchmark-appens första lansering och 2x krympning i både APK-storlek och heapanvändning. Enligt SwiftKeys Adam Clements och Ben Leavett har Skummet gjort det möjligt för dem att hålla Clarity Keyboards laddningstid runt 1,5–2 sekunder, och ytterligare förbättringar är möjliga.
andra användbara verktyg för Clojure-utveckling på Android är packade under paraplyprojektet för Clojure-Android Initiative och inkluderar:
- lein-droid: ett Leiningen-plugin som fungerar som ett byggverktyg för Clojure-Android-projekt och hanterar processen med förpackningsresurser, skapar en APK-fil, signerar den etc.
- Neko: en verktygslåda som sveper vissa delar av Android Java API för att göra dem mer idiomatiska att använda från Clojure.
Zach Oakes, författare till Nightweb-appen för Android, säger att Clojure kan göra en apps kodbas “chockerande” mindre genom att aktivera korta idiom, samt förbättra appens lyhördhet genom att göra det lättare för programmeraren att köra asynkrona uppgifter.
enligt SwiftKeys ingenjörer kan användningen av Clojure för att bygga en Android-app ha en enorm inverkan på appdesignen. Specifikt, i Clarity Keyboards fall, gjorde det det möjligt att anta en helt “händelsestyrd” design, som i kombination med användningen av oföränderlig datastruktur gör det möjligt att enkelt lagra och “spela upp” alla användaråtgärder. Att använda oföränderliga data hjälpte också till att bygga en mycket modulär app och göra varje operation asynkron som standard.