使用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

感谢张龙对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至[email protected]。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

你可能感兴趣的:(使用Clojure构建原生Android应用)