免费下载案例集|20+数字化领先企业人才培养实践经验 了解详情
写点什么

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

评论

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

优酷播放黑科技 | 基于WebRTC实现的直播“云多视角“技术解析

阿里巴巴终端技术

WebRTC 移动开发 直播技术 客户端

Python 的切片为什么不会索引越界?

Python猫

Python

架构训练营 week3 作业

红莲疾风

「架构实战营」

JavaScript面试系列:JavaScript设计模式之桥接模式和懒加载

汪子熙

JavaScript 设计模式 桥接模式 28天写作 12月日更

EMQ & 轻流:全托管物联网消息服务助力海量设备低代码智联

EMQ映云科技

物联网 mqtt

怎样的活动才算是成功?(20/28)

赵新龙

28天写作

NFT改变潮流,也在解放人类创造力的约束

CECBC

如何看待制造企业的数字化转型,有哪些成功案例可以分享?

优秀

低代码 数字化转型 制造业

GrowingIO Reactor速成指南

GrowingIO技术专栏

响应式编程 reactor

☕【Java深层系列】「技术盲区」让我们一起完全吃透针对于时间和日期相关的API指南

洛神灬殇

Java 工具 日期处理 12月日更

如何正确的重写hashcode()

李子捌

Java 28天写作 12月日更

SIGCOMM 首篇 Multi-path QUIC 论文:阿里自研多路径传输技术XLINK

阿里巴巴终端技术

网络协议 传输协议 移动端 客户端 QUIC

CSS之变量

Augus

CSS 12月日更

Gitee 如何自动部署 Pages?还是用 GitHub Actions!

冴羽

GitHub 前端 GitHub Pages gitee vuepress

🏆【CI/CD技术专题】「Docker实战系列」(1)本地进行生成镜像以及标签Tag推送到DockerHub

洛神灬殇

Docker 容器镜像 12月日更 Dockerhub

不要被数据蒙蔽你的眼睛

Geek_utwige

数据分析 统计学 辛普森悖论

网络安全教程:13 信息收集

喀拉峻

黑客 网络安全 安全 信息安全

跟着源码学IM(九):基于Netty实现一套分布式IM系统

JackJiang

Netty websocket 即时通讯 IM

基于HTML5/CSS/JS响应式圣诞老人过悬崖小游戏

海拥(haiyong.site)

28天写作 12月日更

基于区块链的去中心化身份技术有哪些应用前景?

CECBC

王者荣耀异地多活架构设计

Beyond Ryan

vue3.2组件库-element plus 自动按需引入

Mr.Cactus

typescript Vue3 Element Plus Vite2

电竞进入5G时代!腾讯云联合腾讯游戏CROS首秀5G电竞专网

科技热闻

十二张图带你了解 Redis 的数据结构和对象系统

程序员历小冰

redis 数据结构 28天写作 12月日更

开发者供不应求,传统企业如何拥抱 DevOps ?

SoFlu软件机器人

如何推动区块链与物联网深度融合,赋能数字化转型?

CECBC

动手做个 AI 机器人,帮我回消息!

程序员鱼皮

JavaScript AI 前端 nlp Node

复盘健康

将军-技术演讲力教练

在Vue-cli中使用mock.js

CRMEB

如何提高用户留存?

石云升

AARRR 产品思维 28天写作 产品增长 12月日更

聊聊你每天是如何修bug的

卢卡多多

bug修复 28天写作 12月日更

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