使用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而言,这让他们可以采用完全的“事件驱动”设计,再结合不可变更的数据结构,从而可以轻易地保存和“重放”用户的任何动作。使用不可变更的数据也有助于构建高度模块化的应用,使得每项操作默认都是异步的。