写点什么

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

评论

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

Rust 入门指南(使用JSON)

王泰

rust

深圳堡垒机厂家有哪些?重点推荐哪家?

行云管家

网络安全 堡垒机 深圳 运维审计

兆骑科创创新创业大赛平台,人才引进,项目路演

兆骑科创凤阁

开源一夏│别逗,作为程序员你竟还没参与过开源项目?

开源 经验分享 签约计划第三季 8月月更

不得不服!真心被这份阿里大牛开源的“全彩版图解HTTP手册”折服了

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

看完腾讯大佬90天整理的“Redis深度笔记”,我直接当场膜拜

Java工程师

Java redis 源码

R7 6800H标压处理器+RTX 3050独显 无畏Pro15锐龙版高能开卖

科技热闻

太厉害了!华为大牛终于把MySQL讲的明明白白(基础+优化+架构)

冉然学Java

Java MySQL 编程 架构 微服务

《数字经济全景白皮书》银行业智能营销应用专题分析 发布

易观分析

金融 银行 白皮书 智能营销

从TRPO到PPO(理论分析与数学证明)

行者AI

宁夏等保测评机构有哪些?如何选择?

行云管家

等保 堡垒机 等级保护 等保测评 宁夏

面向推荐的汽车知识图谱构建

之家技术

人工智能 机器学习 知识图谱 汽车

数据建模已死,真的吗?

Kyligence

数据建模 数据模型 数据指标

结合实际聊聊电平转换电路(常用电平转换电路总结)

矜辰所致

电路设计 8月月更 电平转换电路

从函数计算到 Serverless 架构

hum建应用专家

云计算 Serverless

在北京参加UI设计培训到底怎么样?

小谷哥

双Q合璧:RabbitMQ与RocketMQ,电子版手绘脑图+学习指南+面试等

冉然学Java

RocketMQ RabbitMQ 架构设计 笔记 java 日志

【大厂面试真题解析】蔚来数字化业务后端一面(2022.8.6)

面试官问

后端 面试题 大厂面试 面经分享 蔚来

架构师学习心得总结

泋清

#架构实战营

vivo手机上的系统级消息推送平台的架构设计实践

JackJiang

网络编程 架构设计 消息推送 即时通讯 即时通讯IM

Github爆火!程序员疯抢的Java面试宝典(PDF版)限时开源

Java工程师

Java 面试 大厂

.NET现代应用的产品设计 - DDD实践

MASA技术团队

.net DDD 实战 MASA Framewrok

leetcode 20. Valid Parentheses 有效的括号(中等)

okokabcd

LeetCode 数据结构与算法 栈和队列

SpringMVC(二、请求和响应)

开源 springmvc 8月月更

爆了!1213页LeetCode算法刷题神册(全彩),GitHub万星仅是开始

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

Java完全自学手册,从外包到大厂,再到年薪100万技术大佬都靠它

JAVA活菩萨

Java 程序员面试 大厂技能 秋招 大厂面经

dubbo 长连接

石臻臻的杂货铺

dubbo 8月月更

兆骑科创创业大赛竞赛平台,双创服务,投融资对接

兆骑科创凤阁

国际计费系统基于Sharding-Proxy大数据迁移方案实践

京东科技开发者

数据库 系统 数据迁移

腾讯SpringBoot高阶笔记,限时开源48小时

冉然学Java

编程 springboot 笔记 java 日志 #开源

关于使用WebStorm两年所总结的一些常用插件和功能

安安安

前端 webstorm

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