使用Clojure構建原生Android應用
在Android平臺上使用Clojure進行開發,在過去幾年中取得了長足的進步,讓開發人員可以把它用于完整的應用,比如SwiftKey的Clarity Keyboard。在本文中,我們將檢閱當前在Android平臺上支持Clojure的工具的情況。
在Android平臺上使用Clojure進行開發,在過去幾年中取得了長足的進步,讓開發人員可以把它用于 完整的應用 ,比如 SwiftKey的Clarity Keyboard 。在本文中,我們將檢閱當前在Android平臺上支持Clojure的工具的情況。
在Android平臺上,使用來自標準升級渠道的Clojure歷來都要遭受緩慢的啟動,相比Java這 可長達4-10倍的時間 。此問題可由 Skummet 來解決,這是Clojure的 分支 ,它優化了Clojure的編譯器,從而可以產生更精簡、加載更快的字節碼(bytecode)。Skummet還包括一個用Skummet構建的經過優化的Clojure運行時版本。
據Skummet的作者 Alex Yakushev 說,Skummet旨在確保最大的兼容性,盡管依賴直接引用Vars的代碼可能會有問題,大部分Clojure代碼默認應該是兼容的。
總的來說,對一個簡單的基準應用,Skummet能夠使首次加載時間縮短到1/4,使APK大小和堆的使用減小到一半。據SwiftKey的 Adam Clements和Ben Leavett說,使用Skummet讓他們可以把Clarity Keyboard的加載時間保持在1.5–2秒,更進一步的優化也是可能的。
在Android平臺上用Clojure開發的其它有用的工具包括在 Clojure-Android Initiative 項目中,有:
- lein-droid :一個Leiningen插件,作為Clojure-Android項目的構建工具,處理打包資源、創建APK文件、進行數字簽名、等等這些過程。
- Neko :封裝了Android某些部分Java API的工具包,使得它們的使用更符合Clojure的習慣。
Zach Oakes,Android版本 Nightweb 應用的作者, 認為 Clojure通過使用簡潔的語法可以使應用的代碼量得到“驚人的”縮減,而且讓程序員更容易地執行異步任務從而也可以改善應用的響應。
據SwiftKey的工程師們說,使用Clojure創建Android應用,對應用的設計會產生巨大的影響。特別是,就Clarity Keyboard而言,這讓他們可以采用完全的“事件驅動”設計,再結合不可變更的數據結構,從而可以輕易地保存和“重放”用戶的任何動作。使用不可變更的數據也有助于構建高度模塊化的應用,使得每項操作默認都是異步的。
查看英文原文: Using Clojure to Build Native Android Apps