Rhodes是一个开源的解决方案,它使得开发人员能够在移动设备上进行Ruby开发。而且它允许使用类似Java的特性,一次编写,到处运行。它 还支持多种设备,例如iPhone、Windows Mobile和RIM的BlackBerry,并且在将来还会支持Symbian和Android。
能够将程序部署到iPhone是一件非常有趣的事,它为iPhone开发提供了另一个选择(继Objective-C之后)。而且,Rhodes以及必需的解释器和程序库都是开源的,由Github托管,还有一个Rhomobile项目的公开BUG追踪系统。
我们采访了Rhomobile的Adam Blum,深入地了解了Rhodes是如何工作的,以及他们是如何成功使得Ruby程序能够在iPhone上运行。
平台
关于如何使得Ruby程序成功地在iPhone上运行的问题。Adam解释说:
答案就是 [..] 我们将开发者的程序和我们的架构以及一个Ruby解释器绑定在一起。为了顺从于AppStore,开发者们不能随意地在其他地方下载解释过的代码。要么他 们忍气吞声,要么他们就选择一种更简单的方法来解决这个问题,只要他们肯违背这种限制的话,那就是集成一个Ruby解释器,直接下载Ruby代码。
iPhone上的Ruby版本现在是1.9版。而且Rhodes支持其他多种平台,并计划添加更多平台的支持,例如Symbian等等。
BlackBerry的应用程序都是用Java编写的,所以想让这个平台支持Rhodes和Ruby,就得多做点儿事。Rhomobile选择了一个雄心勃勃的解决方案,使用XRuby。XRuby是一个Java的Ruby版本,它能够将Ruby源代码编译成Java类文件。XRuby的开发在去年停滞了下来,但是Rhomobile已经选择了XRuby,并且对其进行了改进,现在在Blackberry上使用的是XRuby来运行Rhodes应用程序的。Adam还提道:
我们现在还在搞Android,根据我们在RIM的实现(基于XRuby而不是JRuby)来尝试在Android上运行Ruby代码。
Adam也提到说,需要保持Ruby解释器体积足够小,而这会影响到一些Ruby库的使用:
我们定义了一个子集,这也是为什么我们要自己来做框架的理由。为了让解释器的体积更小,我们可做了不少工作,而且以后会做得更好。
例如eval()
等特性现在也不支持。
因为Rhomobile是与Ruby解释器需要在移动平台上协同工作,我们又和Adam聊了聊他对于这个问题的愿景:
嗯…… 我们当然希望看到Ruby解释器的实现者们把解释器做得更小,而且更关注于当构建了好用的Gems之时,程序库依赖的体积也更小。现在这些事情都是我们在做,不过也还好。
如何工作
Rhomobile目标是支持多种不同的移动电话平台,所以他们选择了构造Rhodes跨平台应用程序架构。简而言之:Rhodes应用程序就是运行在本地设备上的web应用程序(例如运行在设备上的应用程序,其Ruby部分就 如同HTML GUI一样)。这些程序的GUI用HTML来定义,并且使用浏览器来显示。现代的手机都带有浏览器程序,例如iPhone上的基于Webkit的 Safari。也就是说,开发者可以使用通用的web开发方法来开发应用程序,包括在GUI中使用Javascript。Rhodes同样关心如何使 GUI看起来像独立平台上的原生GUI组件,例如使用属于iPhone GUIs的IUI。
但Rhodes还有一些新方法:有一些现代智能手机的高级特性在Rhodes应用开发中也可以使用,比如说地理定位信息;对加速仪、摄像头以及本地PIM的存取下个版本就可以使用。下一个版本预定于1月发布。
使用这些特性,我们可以使用Ruby调用,并且在HTML文件中以HTML标签形式来使用,例如:
<geolocation/>
将会以如下形式展现:
37.3317° North, 122.0307° West;37.331689;-122.030731
像其他Ruby的Web架构一样,开始编写Rhodes应用程序也很简单。在开始的时候,先使用一个生成器:
rhogen app accountapp
这个命令产生了基本的应用程序骨架,包含了控制器以及其他的应用。更多信息请参见Rhodes示例。
Rhodes还包括Rhom,它是一个对象映射器。在Github上同样也有其他的Rhomobile程序库。例如Rhosync,它可以将不同的数据源同步到移动电话上。
Rhomobile 还是一个新项目,现在发布的版本号是0.1,但是0.2版将会在这个月末发布,这个版本改进了PIM的存取以及GUI。0.3版预期会在2009年的一月 末发布,将会支持更多的平台以及支持更多设备(例如加速仪),以及为Rhodes开发者提供项目托管。
最后需要说明一件非常重要的事情,Rhodes是在Github上的一个开源项目。Rhomobile的商用模型基于双许可证。Rhodes应用程序是开源的,但是如果一个公司希望使用Rhodes,并且不打算对外公开源代码,那么就需要从Rhomobile取得商业许可证。
你还知道其他的跨平台解决方案能够像Rhodes一样提供类似级别的集成化吗?你会使用Rhodes来编写程序吗?
查看英文原文:Rhodes Brings Ruby Apps to iPhone, Windows Mobile, BlackBerry