写点什么

使用 Clojure 构建原生 Android 应用

  • 2015-09-27
  • 本文字数:1088 字

    阅读完需:约 4 分钟

在 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 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-09-27 19:005957

评论

发布
暂无评论
发现更多内容

SAP 电商云的 Spartacus Storefront 部署到 CCV2 的前提条件

汪子熙

typescript 电商 SAP commerce 5月月更

[Day33-02]-[二叉树] 恢复二叉搜索树

方勇(gopher)

LeetCode 二叉树 数据结构和算法

Apache Calcite整体架构及处理流程

不穿格子衬衫的程序员

大数据 Apache Calcite database SQL解析

读《Software Engineering at Google》(20)

术子米德

架构师成长笔记

LeetCode 242:有效的字母异位词

武师叔

5月月更

读《Software Engineering at Google》(18)

术子米德

架构师成长笔记

Netty篇之内存管理器

邱学喆

内存管理器 netty内存管理 jemalloc管理器

Nacos 源码简析之 Nacos Client 自动注册原理

道嗔

源码 nacos

TypeScript 概述

Emperor_LawD

typescript 5月月更

读《Software Engineering at Google》(22)

术子米德

架构师成长笔记

【愚公系列】2022年05月 二十三种设计模式(二)-抽象工厂模式(Abstract Factory Pattern)

愚公搬代码

5月月更

C语言总结_字符串全方位练习

DS小龙哥

5月月更

MyBatis 的动态 SQL超详细讲解

顾言

mybatis 动态SQL

[Day33-03]-[二叉树] 二叉树展开为链表

方勇(gopher)

LeetCode 二叉树 数据结构和算法

ubuntu 18及以上版本配置IP的方法,你get了吗

伍工

Linux 网络

读《Software Engineering at Google》(16)

术子米德

架构师成长笔记

某年某周每一天的时间是多少

入门小站

工具

《Linux是怎么样工作的》读书笔记

懒时小窝

Linux Linux Kenel

读《Software Engineering at Google》(17)

术子米德

架构师成长笔记

读《Software Engineering at Google》(21)

术子米德

架构师成长笔记

读《Software Engineering at Google》(23)

术子米德

架构师成长笔记

阿里巴巴Java性能调优实战

Joseph295

公众号运营推广方式

源字节1号

软件开发

Centos7升级Python2到Python3

入门小站

Linux

Go链表与切片比较

jinjin

List 链表 slice Go 语言 切片

如何在 WordPress 中创建登录页面

海拥(haiyong.site)

WordPress 5月月更

maven构建docker镜像三部曲之三:推送到远程仓库(内网和阿里云)

程序员欣宸

Java Docker 5月月更

读《Software Engineering at Google》(24)

术子米德

架构师成长笔记

在线Excel转YAML工具

入门小站

工具

二、应用高可用设计要点

穿过生命散发芬芳

5月月更 高可用设计

读《Software Engineering at Google》(19)

术子米德

架构师成长笔记

使用Clojure构建原生Android应用_移动_Sergio De Simone_InfoQ精选文章