GMTC深圳站本周日开幕,14大专题全部上线,完整日程>> 了解详情
写点什么

Groovy 现在可运行于 Android 平台

  • 2014 年 6 月 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 年 6 月 12 日 01:413352

评论

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

[ CloudWeGo 微服务实践 - 08 ] Nacos 服务发现扩展 (1)

baiyutang

golang 微服务 11月日更

DevOps为何在中国发展滞后?

飞算全自动软件工程平台

CodeGuide 300+文档、100+代码库,一个指导程序员写代码的,Github 仓库开源啦!

小傅哥

Java GitHub 小傅哥 开源社区 代码库

用明道云集成多平台多部门数据,发挥数据分析的力量

明道云

openLooKeng v1.4.1 上线,OmniData Connector 来了

openLooKeng

大数据 大数据处理 大数据分析 openLooKeng

体验内容更新,MindSpore轻松掌握

Geek_6cdeb6

毫米波 5G 比公共 Wifi 快近 30 倍,但覆盖范围相似

DisonTangor

网络

CSS布局之display:flex

Augus

CSS 11月日更

用vscode创建第一个flutter项目

坚果前端

flutter 11月日更

【Flutter 专题】08 图解页面小跳转 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

模块三

模块三作业 外包学生管理系统详细架构设计

小朱

架构实战营

2021 年 Node.js 的发展趋势

💥 玩命不玩心💥

设计消息队列存储消息数据的MySQL表格

毛先生

详细剖析Kafka架构及组件

五分钟学大数据

11月日更

大数据训练营学习总结

arctec

Go语言,测试功能详解-上

微客鸟窝

Go 语言 11月日更

题目二:架构设计题

arctec

懒人畅听网,有声小说类目数据采集,多线程速采案例,Python爬虫120例之23例

梦想橡皮擦

11月日更

创业自研技术团队筹建需要注意什么?

boshi

创业 团队管理

敏捷开发专家一席谈:云原生技术下的华为云DevOps实践之路

华为云开发者社区

DevOps 敏捷开发 华为云 devcloud

技术架构+应用场景揭秘,为什么高斯Redis比开源香?

华为云开发者社区

数据库 redis 开源 云原生分布式数据库 高斯Redis

如何在 JavaScript 中操作二维数组

devpoint

JavaScript array 数组操作 11月日更

题目三、简述HDFS的读写流程

arctec

MySQL打印死锁日志

Simon

MySQL 死锁

作业三总结

Geek_1d37ea

架构训练营

TDSQL首次登上腾讯财报!金融机构核心系统落地实现规模化复制

腾讯云数据库

数据库 tdsql

模块三作业-外包学生管理系统

二手攻城师

「架构实战营」

微信小程序开发:使用字体图标的方法

三掌柜

11月日更

如何“拼”出一个页面-游戏中心模块化实践

vivo互联网技术

开发 组件化 产品方法论

Flink CDC 2.0 数据处理流程全面解析

大数据技术指南

11月日更

2021星空论坛:破局创新,论道数字化转型

2021星空论坛:破局创新,论道数字化转型

Groovy现在可运行于Android平台-InfoQ