写点什么

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

评论

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

ONES CTO 冯斌|如何低成本地做出高质量决策

万事ONES

创业老兵李峻的新征程|ONES 人物

万事ONES

Android技术分享| 自定义View实现使用更方便的SeekBar

anyRTC开发者

android 音视频 移动开发 白板 SeekBar

Scrum Master需要具备哪些能力和经验

华为云开发者联盟

Scrum 敏捷 团队 教练 Scrum Master

为什么HashMap会产生死循环?

王磊

TDSQL-C for PostgreSQL 主从架构详解

腾讯云数据库

tdsql 国产数据库

架构实战训练营-模块7-作业

温安适

「架构实战营」

2021 OceanBase 开源半年度报告 | 不忘初心,感恩同行

OceanBase 数据库

开发者 报告 OceanBase 开源 OceanBase 社区版

1月月更|推荐学java——Spring之AOP

逆锋起笔

spring SSM框架 spring aop 依赖注入 面向切面编程

Jetpack—LiveData组件的缺陷以及应对策略

vivo互联网技术

android livedata JetPack 移动应用开发

ReactNative进阶(二十三):Javascript 严格模式详解

No Silver Bullet

React Native 1月月更

Serverless 背景下,一部分“前端工程师”会转变为“应用交付工程师”

杨成功

Serverless 架构 前端

我相信:没有解不开的难题|ONES 人物

万事ONES

前端开发之JQuery的综合应用

@零度

jquery 前端开发

CSS 自适应内容宽度的输入框

编程江湖

Hive SQL底层执行原理

五分钟学大数据

Hive SQL 1月月更

前端使用 zx 库在 Node 中编写 Shell 脚本

devpoint

node.js Shell 1月月更 zx.js

龙蜥社区一周动态 | 1.10-1.14

OpenAnolis小助手

Linux 开源 社群

虎符研究院深入解读Web3.0未来趋势 盘点代表性项目

区块链前沿News

Web Hoo虎符 虎符研究院 虎符平台 3.0

项目管理是做什么

爱吃小舅的鱼

低代码实现探索(二十二)如何构建一个可以看的懂的系统

零道云-混合式低代码平台

Chrome插件:摸鱼倒计时、每日摸鱼时间统计,奋斗逼、卷王必备,用于减少摸鱼时间和频率

OBKoro1

效率 开源 效率工具 chrome扩展 高效率

Go 语言快速入门指南:Go 并发初识

宇宙之一粟

golang 并发 Go 语言 1月月更

GIS :元宇宙未来发展的有力技术支撑

华为云开发者联盟

AI GIS 虚拟世界 数字孪生 云宇宙

TDSQL | 将企业级分布式数据库做到极致

腾讯云数据库

tdsql 国产数据库

TDSQL PG版企业级分布式数据库技术创新实践

腾讯云数据库

tdsql 国产数据库

java开发之Redis的使用规范

@零度

redis JAVA开发

知识库进化论 | 华创资本对话 ONES & 为知笔记创始人

万事ONES

线上流量对比应用实践

得物技术

架构 数据 流量 实践 流量回放

使用php-amqplib实现RabbitMq

Owen Zhang

php RabbitMQ php-amqplib

软件设计——依赖倒置

苏州程序大白

架构师

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