【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

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

评论

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

聊一聊新陈代谢

Taylor

创新 新陈代谢

存储资源盘活系统,“盘活”物联网架构难题(上)

天翼云开发者社区

易观分析对《上海市促进人工智能产业发展条例》的解读

易观分析

人工智能 上海

千亿流量并发治理!Alibaba实战Sentinel笔记,为微服务保驾护航

Geek_0c76c3

Java 数据库 开源 程序员 架构

荣耀开发者平台全面升级,加强分发场景服务与能力开放

荣耀开发者服务平台

开发者 手机 安卓 荣耀 honor

如何使用iMazing监督、配置器功能

淋雨

ios iphone

【redis】Redis cluster是AP架构还是CP架构?

非晓为骁

redis 分布式架构 redis cluster 分布式理论

企业知识管理怎样做?一些解决方案分享!

Baklib

SaaS时代,您的企业与团队需要知识管理工具

Baklib

数据中台与数据平台有什么区别?

雨果

数据中台 数据平台

西部省份数字化需求暴涨 首届828 B2B企业节见证企业数字化新浪潮

科技热闻

行走的Offer收割机!首次公布Java10W字面经,Github访问量破百万

Geek_0c76c3

Java 数据库 开源 程序员 面试题

英特尔发力“系统级代工”,为芯片制造带来全新可能

科技之家

计算机网络——点对点协议PPP

StackOverflow

编程 计算机网络 9月月更

Netty高性能之Reactor模型

C++后台开发

后台开发 reactor 多线程 网络io模型 C++开发

架构---作业1

李某人

架构实战营

健康信息化不断建设——2022年8月互联网医疗月度观察

易观分析

医疗

微服务框架搭建过五关斩六将—第一关(网关)

为自己带盐

微服务 网关 9月月更

仅靠一文便火爆全网!开源阿里绝密800页JDK源码笔记:霸榜GitHub

Geek_0c76c3

Java 数据库 程序员 架构 开发

分布式系统中自适应统计信息收集策略

KaiwuDB

区块链商城dapp系统开发,代币模式定制

开发微hkkf5566

架构三原则学习心得

Jack

架构 #架构训练营

为什么说企业需要实施知识管理?

Baklib

[iOS研习记]聊聊iOS中的Mach-O

珲少

一文读懂“云游戏”

Finovy Cloud

人工智能 云渲染 云游戏

led显示屏的合理亮度很有必要

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

AX200NGW//2×2.4GHz 2x5GHz MT7915 MT7975 //AR9582 2x 2 900M 802.11an//network card//wallys

wallys-wifi6

MT7915 AX200NGW AR9223

计算机网络——媒体接入控制——静态划分信道

StackOverflow

编程 计算机网络 9月月更

知识经济时代的基石:知识协同

Baklib

Jmix 中 REST API 的两种实现

世开 Coding

Java Spring Boot Jmix 少代码 企业级开发

计算机网络——媒体接入控制的基本概念

StackOverflow

编程 计算机网络 9月月更

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