Groovy 现在可运行在 Android 系统上了! 【已翻译100%】

在最近的GR8Conf Europe 2014期间,SpringSource/Pivotal的Groovy高级软件工程师 Cédric Champeau已经在Andriod上完成一次Groovy代码的现场pull请求的合并。

Groovy开发人员为了在Android上运行Groovy已经等待好几年了。因为各种困难,它的实现被推迟了,这包括Andriod Dalvik虚拟机的不同字节码和Groovy代码的动态特性等。官方对Android的支持可能在Groovy2.4版本。InfoQ采访了 Champeau,了解了更多的这方面的内容以及未来Groovy在Andriod系统中的发展。

InfoQ:让Groovy在Android上工作,最困难的部分是什么?

实际上有多个问题,它们结合在一起使得这个工作变得有些困难。第一个问题是Groovy是一个在运行时生成类的动态语言。问题是那些类是使用标准的JVM格式生成的,而Android使用了自己的类格式(Dalvik VM)。Dalvik VM并不意味着运行时创建类,这样就变得很困难,因为每个使用标准JVM字节码的文件都需要通过'dex'工具加载处理。甚至你能够在设备上做到这些,运行时加载类仍然是痛苦的。例如,在jar文件中写一个类,然后加载这个jar。最后,我们决定这不是Groovy运行在Android上的主要关注点,我们应该更关注用Groovy写一个完整的应用,不涉及运行时创建类。这意味着有一些限制,但是这对许多用户来说是不可见的。最后,如果你在Android上静态编译Groovy时,使用了@compileStatic,性能以及内存消耗相当于或者同Android原生应用相同。

第二个问题实际上是和系统构建相关。新的Andriod构建系统使用了Gradle和一个自定义的插件,"android",它绕过了正常的"java"和"groovy"插件提供类似于应用程序变种的功能。这需要一些工作来弄清楚我们如果插入它来添加对Groovy的支持。令人欣慰的是自从公布以后,Groovy的Gradle插件和Android已经发布,使得事情变得更容易了。最后但并非最不重要的一点,我通过编写对Groovy的支持了解了Android。这是一件好事情,因为我可以看到在哪些地方使用Groovy会让你受益,但是实际上这花费我更多的时间比适配Groovy本身!

InfoQ:将来会考虑将这项工作扩展到iOS或者至少是Windows Phone来作为一中跨平台解决方案吗?

我肯定非常希望能在iOS上面看到Groovy的身影,但是我没有硬件设备去测试;)即使最近发布的Swift语言看起来与Groovy非常接近并且远远比Object-C吸引人,人们仍然可以把它作为Groovy的一种替代。但是,我们还要考虑这样一个问题:Swift是由供应商封锁的闭源软件。相比之下,Groovy则是完全开源的,如果你能在iOS和Android平台下用Groovy进行编码,举个例子来说,人们可能需要做的仅仅是重写他们应用的UI部分就可以使他们的应用更适应大部分的手机开发。至于Windows Phone,我完全不知道这是否可行。实际上对于这个平台,我了解甚少。

InfoQ: 当前有哪些不足之处? 还有哪些是不能运行的?

直到最近,仅仅@CompileStatic类能运行在Android上。但是现在也可以运行动态代码了,因此几乎所有的东西都能运行了,包括构建器。应当知道,使用动态代码应限于应用程序的非CPU密集型部分,因为它涉及到反射。这就是说,当前的限制是不能运行时实时构建类,因此一些特定的结构比如映射到类或者实时运行特征将不工作。欣慰的是有办法解决这些问题。最后,在方法描述符的数量上仍然有问题。Andriod缺省的方法总量的限制是65536,这相当的低,在无优化的情况下,Groovy将消耗8k(例如,ProGuard)。因此这意味着比通常的java应用程序更快的到达限制,即使有方法可以解决这件事情(例如用multidex选项)。

InfoQ:对将来Groovy/Android的发展有何规划?

CC: 官方对Android的支持会有第一个测试版的Groovy2.4。目前,你已经可以将其应用于自己的应用程序,并且实际上在第一个示例应用程序中,这已经包含在产品中。([2])但是它仅是基于Groovy的一个快照版本。但我真的很想看看新的库或框架编写的Groovy是如何便利Android应用程序的开发。Android非常啰嗦,Groovy则可以使编码更容易。为此,我们很多社区的开发人员已经写了大量的像这样的为Java开发的库,所以Groovy的普及和发展只是时间问题。我相信一旦用户在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

时间: 2024-09-09 04:31:06

Groovy 现在可运行在 Android 系统上了! 【已翻译100%】的相关文章

Ubuntu中为Android系统上实现内置C可执行程序测试Linux内核驱动程序_Android

在前一篇文章中,我们介绍了如何在Ubuntu上为Android系统编写Linux内核驱动程序.在这个名为hello的Linux内核驱动程序中,创建三个不同的文件节点来供用户空间访问,分别是传统的设备文件/dev/hello.proc系统文件/proc/hello和devfs系统属性文件/sys/class/hello/hello/val.进一步,还通过cat命令来直接访问/proc/hello和/sys/class/hello/hello/val文件来,以验证驱动程序的正确性.在这一篇文章里,我

视频播放-如何在android系统上旋转视频方向

问题描述 如何在android系统上旋转视频方向 目前在做一个盒子,无陀螺仪,视频播放时方向不正确.试了各种方法,无效. 解决方案 tabbar的旋转方向 解决方案二: 太麻烦了,没有大侠知道吗?

苹果iPhone遭破解可运行谷歌Android系统(图)

4月23日消息,据国外媒体报道,iPhone破解团队Dev Team成员David Wang日前表示,他已经将谷歌Android系统成功地移植到苹果iPhone手机上. David Wang通过openiBoot实现了Linux和iPhone OS双系统启动,并运行linux kernel引导进入了Android系统.之后,包括浏览器.WiFi.Flash.虚拟键盘.音乐播放器.短信和Skype等在内的应用均能正常运行. David Wang称:"移植后的Android系统虽然没有达到'生产级别

Ubuntu中为Android系统上编写Linux内核驱动程序实现方法_Android

        在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore.随着Android系统逐步扩大市场占有率,终端设备的多样性亟需更多的移动开发人员的参与.据业内统计,Android研发人才缺口至

Ubuntu中为Android系统上编写Linux内核驱动程序实现方法

在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了.据统计,截止2011年5月,AppStore的应用软件数量达381062个,位居第一,而Android Market的应用软件数量达294738,紧随AppStore后面,并有望在8月份越过AppStore.随着Android系统逐步扩大市场占有率,终端设备的多样性亟需更多的移动开发人员的参与.据业内统计,Android研发人才缺口至少30万.目前,

运行原生Android系统的谷歌版OPPO Find 5?

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   目前,一般的"大厂"推出的 Android手机都会搭载自己定制过的UI,鲜有直接采用原生Android系统的. 不过在三星发布了谷歌版 Galaxy S4之后,似乎别的厂商也已经有"松动"迹象.华为余承东已经表明不会推出谷歌版(采用原生Android系统)的Ascend P6, 但是国内其他厂商却已经有此想法,而 OPPO

索爱宣布将Android系统上的WebGL后端实现开源

在去年11月的时候,索爱宣布在http://www.aliyun.com/zixun/aggregation/1641.html">Xperia系列手机上原生支持WebGL,从而成为世界上第一个正式支持WebGL的手机厂商.目前,作为下一步跟进,索爱正在将这一支持延续到Android 4.0上,而且是完全开源的.1月25日,索爱高级软件架构师Anders Edenbrandt在开发者频道的网站上对此进行了详细的说明. 自从索爱宣布将在Android 2.3系统上添加WebGL支持之后,就收

远程执行 Android 设备上的代码 【已翻译100%】(1/2)

"你走进一个咖啡店坐下来.等咖啡的时候,你拿出你的智能手机开始玩一款你前些天下载的游戏.接着,你继续工作并且在电梯里收邮件.在你不知情下,有攻击者获取了公司网络的地址并且不断地感染你所有同事的智能手机. 等下, 什么? 我们在Bromium实验室博客上不会谈论Android太多.但是不时地我们喜欢修修补补.近来,我的同事Thomas Coudray 和我探索了下Android远程代码执行的易损性,想弄明白易损性在现实应用中是多大的问题. 尽管权限提升技术在Android上很普遍(并形成了&quo

在android系统上写C语言程序--开机启动该程序不进入安卓系统

     今天要写的这篇博文意义重大,也是网上很少有的,这是在我工作中学会的一项技术,当然,它也是由简单的问题组合而来的.如何在安卓中写C语言程序,调试安卓驱动,测试程序的的一项重要技能,下面我就不说废话了,直接说实用的,怎么用这个东西.      关于这个问题,相信很多学Android的都会去关注这个问题,大家普遍会有个这样的疑问:安卓是怎么跑起来的?     最简单的说法,安卓系统是这样加载的:     Bootloader------Kernel(对应平台版本的Linux内核)------