前Sun开发人员为Android,iOS等其他移动平台提供JAVA的WORA支持
2012年,在以色列出现了一个名为 Codename one的公司,该公司旨在生成一种新的Java SDK,该SDK将允许Java开发人员通过一个单一的代码库就能为包括iOS,Android,BlackBerry和Windows Phone等一系列的移动设备编写本地应用。对于iOS,Codename one通过自己的云服务器先将Java代码转换成C或者Objective C代码,然后再将转换后的源代码编译成本地应用程序。这使得利用Java来编写iTunes兼容应用成为可能。
Codename one的两大创始人分别是Chen Fishbein和Shai Almog。Fishbein是Java ME标准用户界面工具——Lightweight User Interface ToolKit(LWUIT)的创始人和首席架构师,并且他还开发了当下最成功的Java ME 开发工具之一的Sprint Wireless ToolKit。
该平台现正处于Beta测试阶段,InfoQ下载后进行了测试。这个过程花费了很长的时间。为了构建代码,需要将他们基于云服务的网址添加到代码库中。代码将被上传到该服务器并进行编译,然后生成一个二维码(QR code),通过该二维码你可以下载并安装最终的程序到设备中。出于好奇,为了更多的了解该公司,我们采访到了该公司的联合创始人兼CEO Shai Almog先生,询问了一些关于他们最新发布对Windows Phone提供支持的事宜。
InfoQ:你好Shai,这个想法由来已久了。这真的是一个全平台通用的Java环境吗?
Almog:Java不仅仅是一个虚拟机,它也是一个统一的堆栈,一系列的工具集,实际上更是一个完整的Java生态圈。Java的意义在于它的一触即发。即便是Android,也需要一套不同的流程,一套不同的工具集以及一个针对不同配置的的模拟器。这样以来,我们反而失去了“一处编译,到处运行(WORA,Write Once Run Anywhere)”的优势。
InfoQ:对于不同的环境需要不同的修改吗?
Almog:不完全是,Codename one为不同的平台提供统一的API支持,并将它们直接集成到Java环境中,通过一个统一的环境来解决所有不同的细节问题。
InfoQ:是否为每一个平台都配置了相应的JVM?
Almog:不,这取决于平台。对于Android,我们主要还是使用Dalvik虚拟机。但是对于没有Java环境的iOS平台,我们就将classes文件翻译成Objective C的代码,并且使用Boehm的垃圾回收器。该回收器能运行Java代码,但他并不是真正意义上的Java虚拟机。在RIM和其他平台上,我们通过平台上现有的有限Java子集特性来进行编译。这样就可以获得跟Java一样的WORA体验了。
InfoQ:你们试图在每个版本的发布中都对所有平台的所有特性都进行支持吗?
Almog:我们在尽力,但由于底层设备的变化,通常情况下很难达到。SQL就是一个很好的例子,开发者都想使用它,但是一些低端的设备并不支持。开发者可以查看每个特定环境下的支持情况。我们的策略是提供一个尽量通用的集合,并尽可能地完善它。
InfoQ:我需要一些真实的设备来进行开发吗?
Almog:理论上是不需要,但是你不能仅仅通过鼠标来体验应用程序;你需要真实的拿着你的手机并且感受它来获得准确而真实的性能和使用感受。我们就因为一些版本上的细微变化而使用不同的iPad。
InfoQ:对于这么多不同的Android版本,它实现起来应该比较困难吧?
Almog:实际上iPhone更困难。Apple在不断的变化,在4.2上运行的方式可能在4.3上就是另外一种完全不同的做法。此时你会发现一切都运行不起来了。Android虽然有很多的版本,但是他们通常很少会有破坏性的改变,所以,差异并不是很大。
InfoQ:应用程序的使用者需要安装什么特定的程序吗?
Almog:不需要,一切均包含在应用中。这可以帮助我们保持稳定性我们保持的很稳定的原因是因为我们不支持一些移动的虚拟机目标。不同版本的设备差异化很大,但是我们只关注各个版本之间的兼容性问题,如此一来,开发者们也不需要去关注它了。
InfoQ:对于Java开发者来说,学习曲线是怎样的?
Almog:这其实相当的简单。对于大部分的Swing开发者来说,跟基于XML的Android比起来,他更像是Swing的开发方式。你可以使用内置的调试器,这里没有APK文件,你也不需要等待模拟器启动,我们的模拟器在每次运行的时候就能立刻启动起来。
InfoQ:有些人说Swing有点呆滞,并没有原生Windows应用的那种用户体验。你们的平台有什么好的做法来使他们看起来跟时尚一些吗?
Almog:Swing的界面是很难定制的,由于它是和JDK的版本进行绑定的,所以不能在外观和体验上跟操作系统保持一致。Codename One允许在组件模型上做深度的风格和主题定制,而且因为我们是SaaS和OpenSource的成员,我们可以不通过Sun/Oracle缓慢的升级流程,而独自在应用程序的体验上保持不断更新。这样就能保证一个时尚的用户体验。
InfoQ:对3D图像的支持如何?
Almog:很遗憾,对于这一点,我们目前还不支持游戏类的开发。但是相信在未来可能有所改观。
InfoQ:那对于那些设备特定特性的支持呢,比如I/O,GPS,摄像头,音频等等?
Almog:我们都支持这些基本的API,我们正在开发手势操作,并且现在有些已经可以支持了,但是如果你需要一些我们并不支持的特性,那么我们可以给你提供本地集成。你可以定义接口,然后我们的插件会为你的设备生成本地代码,这样你就可以调用那些本地功能了。
InfoQ:产品是如何收费的?
Almog:基本版是免费的,而且我们会一直这么做下去。回报社区是非常重要的。每个月我们会为除了iOS以外的其他平台提供100次的构建服务。如果你是本地构建的话,你可以随意构建,但是我们的构建服务器限制你只能进行100次构建。iOS平台被我们限制成一个月只能进行5次构建,因为对于我们来说,每一次的构建代价都是相当昂贵的。你还可以每个月花费9美元,以获得不限次数的构建。我们还为一些额外的特性提供了更多的定价方案,比如宕机保护。
InfoQ:你们的文档和支持做的怎么样?
Almog:《开发指南》是我们邀请社区帮忙编写的一个100多页的Google文档。我们也维护了一份详细的JavaDoc并且花费了大量的时间在维护Google Group邮件列表。
InfoQ:看起来你们好像在做一件伟大的事情啊。那你们下一步有什么打算呢?
Almog:马上就会有很多好消息了。到九月下旬的时候,对Windows 设备的支持将会开放。届时我们将添加应用内的支付功能,以及针对客户端和模拟器开放更高级的API,提供给开发者更多的模版。而且我们刚刚公布了同Vserv的合伙计划,这样开发者在不改变任何代码的情况就能添加广告进自己的程序。
随着支持多移动平台的公司越来越多,Codename One可以帮助那些开发更多新应用的公司提高市场占有率和利润。该SDK可以在 其官网上进行下载。
查看英文原文: Ex Sun Developers Bring WORA Java Support to Android, iOS, and Other Mobile Platforms