最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

Groovy 现在可运行于 Android 平台

  • 2014-06-12
  • 本文字数:1771 字

    阅读完需:约 6 分钟

在最近的 GR8Conf 欧洲 2014 大会期间,SpringSource/Pivotal 的 Groovy 高级软件工程师 Cédric Champeau现场执行了一次Pull 请求合并,带来了Android 平台的Groovy 支持

Groovy 开发者为此已经等待了数年时间。由于 Android Dalvik 虚拟机使用不同的字节码格式以及 Groovy 代码的动态特性,该功能的实现一直被推迟。而 Groovy V2.4 将带来官方的 Android 支持。

InfoQ 采访了 Champeau,了解更多详情以及 Android 平台上 Groovy 未来的发展。

InfoQ:让 Groovy 在 Android 上工作,最难的部分是什么?

CC:实际上有多个问题,这些问题合起来就变得有些困难。第一个问题是 Groovy 是动态语言,它在运行时生成类。问题是这些生成的类使用“标准”的 JVM 格式,而 Android 使用自己的类格式(用于 Dalvik 虚拟机)。Dalvik 虚拟机在运行时并不创建类,这变得非常困难,因为每个使用标准 JVM 字节码的文件都要通过“dex”工具处理,以使其变得可加载。即使你成功地在设备上做到这点,在运行时加载类仍然是一种痛苦。例如,这需要在 jar 文件中写入一个类,然后加载这个 jar。最后,我们决定这不是 Groovy 运行于 Android 上的主要关注点,我们宁愿用 Groovy 开发一个完整的应用,而不涉及在运行时创建任何类。这意味着会有一些限制,但它们对大多数用户应该是不可见的。最后,如果你使用 @CompileStatic 静态地编译 Android 上的 Groovy,性能和内存消耗都接近于或者与 Android 原生应用相同。

第二个问题实际上与构建系统相关。新的 Android 构建系统使用 Gradle 和自定义插件“android”,它绕过了通常的“java”和“groovy”插件,提供了类似应用变种的功能。我们如何在其中插入 Groovy 支持,这需要花一些工作量。令人欣慰的是,自从公布之后,一个用于 Groovy 和 Android 的 Gradle 插件已经发布,使得事情变得更简单了 [1]。最后但同样重要的是,当我开发 Groovy 支持时,我学习了 Android。这是件好事,我知道你将因为使用 Groovy 而获益,但它也确实花了我很多时间,比修改 Groovy 的时间更多!

InfoQ:有没有可能将它扩展到 iOS 或者至少是 Windows Phone,作为一个跨平台解决方案?

CC:我当然乐意看到 Groovy 运行在 iOS 上,但我没有硬件用于测试 ;) 虽然最近宣布的 Swift 语言看起来很接近 Groovy,它也比 Objective-C 更有吸引力,大家可以使用它作为 Groovy 的替代品,但有件事必须考虑:Swift 是供应商锁定的封闭软件。而 Groovy 是完全开源的,举例来说,如果能在 iOS 和 Android 上使用相同的代码,开发者很可能只需要重写应用的 UI 部分,它就变得更适合于通用的移动应用开发。至于 Windows Phone,我不知道是否可行,实际上我对这个平台缺乏了解:)

InfoQ:目前还有哪些不足?哪些还不能正常工作?

CC:直到最近,只有 @CompileStatic 类才能运行于 Android 平台。而现在已经可以运行动态代码了,因此基本上全部都可以工作了,包括构建系统。需要注意的是,动态代码应该仅用于应用程序的非 CPU 密集部分,因为它涉及到反射。也就是说,目前的限制是它不太可能(很难)在运行时生成类,因此一些特定的构造,例如强制映射到类或者运行时特性将无法工作。幸运的是有变通方法解决这些问题。最后,方法描述符的数量仍然有问题。Android 默认的方法总量限制为 65536,这是个非常低的值。未进行优化(例如使用 ProGuard)时,Groovy 将消耗约 8k。这意味着即使有办法解决此事(例如使用 multidex 选项),你仍将比普通 Java 应用更快达到这个限制。

InfoQ:对 Groovy/Android 的未来有什么计划?

CC:正式的 Android 支持并会在 Groovy 2.4 的第一个 beta 版本提供。目前,已经可以将其用于你自己的应用,正如第一个示例应用所展示 [2],它实际上已经处于产品状态。只是它是基于 Groovy 的 Snapshot 版本。但我真的想看到使用 Groovy 开发的新类库或框架,促进 Android 应用开发。Android 开发非常繁琐,而 Groovy 能让开发变得更简单。为此,我们能依赖广泛的开发者社区,他们已经为 Java 开发了大量这样的类库,因此这只是时间问题。我相信一旦开发者尝试了 Android 上的 Groovy,他们就不太可能再切换回 Java 了 ;)

[1] https://github.com/melix/groovy-android-gradle-plugin

[2] https://play.google.com/store/apps/details?id=me.champeau.gr8confagenda.app

查看英文原文: Groovy Now Runs on Android

2014-06-12 01:413669

评论

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

TiDB 4.0 新特性前瞻:白话“悲观锁”

TiDB 社区干货传送门

VIPKID 的高可用架构设计及 TiDB 应用实践

TiDB 社区干货传送门

TiUP 使用梳理 - 02

TiDB 社区干货传送门

Chaos Mesh + SkyWalking,打造可观测的混沌工程

TiDB 社区干货传送门

TiSpark 服务安装、部署及测试

TiDB 社区干货传送门

TiDB 4.0 新特性尝鲜指南献上,投稿【试玩体验】斩获 TiDB 限量周边~

TiDB 社区干货传送门

TiUP 使用梳理 - 01

TiDB 社区干货传送门

TiDB 在海航易建科技与香港航空研发收益支持系统过程中的实践

TiDB 社区干货传送门

TiDB 在株式会社 FUNYOURS JAPAN 的应用

TiDB 社区干货传送门

TiDB 分区表优化实践

TiDB 社区干货传送门

4.0 新特性前瞻:新表数据编码格式

TiDB 社区干货传送门

浅析 TiDB 二阶段提交

TiDB 社区干货传送门

TiDB备份恢复方式你知多少?

TiDB 社区干货传送门

Gravity 的测试调研 Gravity -> TiDB

TiDB 社区干货传送门

TiDB 的统计信息

TiDB 社区干货传送门

TiDB用什么保证备份的一致性?

TiDB 社区干货传送门

TiDB 悲观锁实现原理

TiDB 社区干货传送门

TiDB 性能问题排查常用操作

TiDB 社区干货传送门

解读 TiDB Server

TiDB 社区干货传送门

贝壳金服 TiDB 在线跨机房迁移实践

TiDB 社区干货传送门

迁移 MySQL 集群到 TiDB 相关问题整理

TiDB 社区干货传送门

TiDB Ansible 使用指南

TiDB 社区干货传送门

TiDB new feature max_execution_time

TiDB 社区干货传送门

初探TiDB-TiFlash

TiDB 社区干货传送门

Raft 协议学习笔记

TiDB 社区干货传送门

Lightning for CSV:快速指南

TiDB 社区干货传送门

TiDB 5.3 发版 —— 跨越可观测性鸿沟,实现 HTAP 性能和稳定性的新飞跃

TiDB 社区干货传送门

Region 创建、分裂及合并的原理

TiDB 社区干货传送门

【TiDB 4.0 试玩体验】TiDB 性能对比(v3.0.12 VS v4.0.0-rc)

TiDB 社区干货传送门

TiDB 实战优化之 SQL 常见问题与优化案例

TiDB 社区干货传送门

知乎已读服务的前世今生与未来

TiDB 社区干货传送门

Groovy现在可运行于Android平台_Android/iOS_Abel Avram_InfoQ精选文章