写点什么

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

评论

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

百度智能云一念:视频模型D&S-AI Video,秒级生成营销视频

爱AI的猫猫头

人工智能 音视频 大模型 办公效率 AI视频

阿里云数智服务创新挑战赛总决赛铜奖比赛攻略_NJUSME队

阿里云天池

JNPF低代码开发平台如何助力传统制造业破茧成蝶

EquatorCoco

低代码

体验了下豆包MarsCode编程助手,惊艳到我了!

左诗右码

AI

视频云流化是什么?有哪些好处

3DCAT实时渲染

云流化 云流化PaaS平台 实时渲染云流化

合资新能源价值新标准 MAZDA EZ-6领衔亮相2024成都国际车展

Geek_2d6073

你知道的项目型企业管理系统,这10款值得推荐

爱吃小舅的鱼

项目管理 企业管理

如何判断全面预算和EPM软件架构是否符合技术规范?

智达方通

数字化转型 多维数据库 企业绩效管理系统 管理会计信息化 新ERP

揭秘| 用友坚持做大模型的原因

用友BIP

In-depth analysis IPQ5332 vs IPQ9570 WiFi7 motherboard CPU

wifi6-yiyi

源于清华的开源时序数据库IoTDB刷新世界纪录

Apache IoTDB

场景题:如何提升Kafka效率?

王磊

最高等级!腾讯云AI代码助手获中国信通院代码大模型评估4+级

Geek_2d6073

实战演练:利用京东API一键抓取商品详情

技术冰糖葫芦

api 网关 API Explorer API 策略

9月7-8日,Rust China Conf 2024 来啦!

Mike Tang

开源 rust 上海 rust conf rust开发者大会

【攻略】第三届数据库大赛创新上云性能挑战赛-高性能分析型查询引擎赛道-冠军

阿里云天池

大模型营销战,“砸钱”能缓解商业化焦虑?

趣解商业

百度 腾讯 互联网 大模型

智谱清言 App 面向 C 端开放 AI 视频通话服务;谷歌 GameNGen:神经网络驱动的实时游戏引擎丨RTE 开发者日报

声网

AI自动化副业创收班手把手带你提升副业收益

霍格沃兹测试开发学社

人社大赛算法赛场解题思路分享+冠军+破灭刀锋

阿里云天池

多链钱包系统开发(开发原理)丨多链钱包开发源码模式

V\TG【ch3nguang】

免费高效!3步实现Llama3模型远程访问与协作

贝锐

AIGC Llama3 贝锐

论低代码平台在业务系统中的多种应用形态

快乐非自愿限量之名

低代码 业务开发

前波士顿咨询Platinion董事总经理陈果加入望繁信科技

望繁信科技

流程挖掘 流程资产 流程智能

天翼云HBlock:打造高效、安全、可扩展的云存储体验

百里丶落云

磁盘 数据库· HBlock #天翼云 #HBlock

打造高效农业项目 10款农业建设管理系统购买指南

爱吃小舅的鱼

项目管理 农业

用友YonData如何刷新企业数据管理与应用新高度?

用友BIP

JNPF再进化,低代码革命让数字化无处不在

不在线第一只蜗牛

低代码

【vue3】详解单向数据流,大家千万不用为了某某而某某了

快乐非自愿限量之名

JavaScript vue.js 前端

AI+营销:AI赋能企业大客户经营更高效、更智能

用友BIP

一站式解决方案:10款项目型企业系统选购指南

爱吃小舅的鱼

项目管理

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