写点什么

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:413770

评论

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

API可观察性对于现代应用程序的最大好处

幂简集成

API API 接口

蓝易云 - 对于跨境电商来说海外云服务器选择哪家比较好?

百度搜索:蓝易云

云服务器 跨境电商 独立站 香港服务器 高防服务器

蓝易云 - route命令小结

百度搜索:蓝易云

云计算 Linux 运维 windows Route

GraphicConverter 12滤镜和效果:mac高级图像编辑工具

理理

A Better Finder Rename(ABFR):Mac平台上的批量重命名工具

理理

扎克伯格说AI会让推荐系统变得更强大?一文读懂什么是智能推荐系统

爱AI的猫猫头

人工智能 音视频 推荐系统 办公效率 搜索系统

顶级项目管理工具比较:找到你的最佳匹配

爱吃小舅的鱼

文档管理 文档管理软件

小企业必备:顶级免费项目管理工具

爱吃小舅的鱼

项目管理 免费

数据分析与决策支持:京东商品详情API的商业价值

技术冰糖葫芦

API Explorer api 货币化 API 接口 API 测试

IoTDB 单机/双活/集群部署的区别和适用场景

Apache IoTDB

鸿蒙 NEXT 应用开发训练营毕业总结

白开水又一杯

测试人必会 K8S 操作之 Dashboard

EquatorCoco

Kubernetes 容器 云原生 测试

现成源码开发游戏直播软件:应对快速变化的技术和用户需求

软件开发-梦幻运营部

使用舞美LED显示屏的关键点

Dylan

技术 LED LED显示屏 led显示屏厂家 舞台表演

竹内亮做客华为视频AiMax影视品鉴会,讲述镜头下的真实故事

最新动态

蓝易云 - 高防服务器如何抵御大规模攻击

百度搜索:蓝易云

云计算 运维 云服务器 香港服务器 高防服务器

有限元CAE分析厂商 热力学仿真CFD分析咨询

Geek_2d6073

Python 提取出SQL语句中Where的值的方法

不在线第一只蜗牛

Python sql 开发语言

如何设计一套单点登录系统 ?

快乐非自愿限量之名

单点登录 项目开发

EdgeView 4 for mac:快速浏览、编辑和管理图片

理理

Qwen2-Math 开源 AI 模型发布;阿里云推出首个域名 AI 大模型应用丨 RTE 开发者日报

声网

寻找最佳开源知识管理软件:专家指南

爱吃小舅的鱼

开源 知识管理

蓝易云 - 怎么安排insert和update语句的执行顺序

百度搜索:蓝易云

云计算 运维 服务器 云服务器 INSERT

全文彩印!人民邮电出版的“24小时学会黑客攻防”,讲的太好了!

我再BUG界嘎嘎乱杀

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

远程访问内网设备:对比IPsec VPN,SD-WAN异地组网更具优势

贝锐

运维 SD-WAN 远程运维 组网

【活动预告】研讨会+开源集市,IoTDB “登录” GOTC 2024!

Apache IoTDB

掌握项目预算:顶级成本管理工具评测

爱吃小舅的鱼

项目成本管理

蓝易云 - 关于Ingress-nginx的跨域配置

百度搜索:蓝易云

nginx 云计算 Linux 运维 HTTP

Inpaint for mac激活版:一键去除水印

理理

WiFiSpoof for Mac(wifi地址修改工具):保护wifi隐私安全

理理

阿里巴巴拍立淘API返回值:商品关联推荐与交叉销售

技术冰糖葫芦

API Explorer api 货币化 API 接口 API 测试

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