前 Sun 开发人员为 Android,iOS 等其他移动平台提供 JAVA 的 WORA 支持

  • Victor Grazi
  • 方盛

2012 年 9 月 24 日

话题:JavaAndroidiOS语言 & 开发

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

JavaAndroidiOS语言 & 开发