RoboVM将Java 8程序员汇聚至iOS平台
Java在iOS平台上的糟糕表现一直是Java开发者们的心头痛处。尽管Java开发人员能够通过种种迂回方式将自己构建的应用程序运行在这类设备之上,但苹果公司在其iOS智能手机与平板设备上针对Java作出的开发限制仍然令人头痛不已。为了解决这一老大难问题,RoboVM作为同类技术方案中的佼佼者在最近于旧金山召开的JavaOne技术大会上正式亮相。
RoboVM能够将Java字节码转换为原生ARM或者x86代码,其中还包含一套用于对接Java与Objective-C代码的通道。就目前而言RoboVM尚主要被运用在游戏应用领域,但项目创始人Niklas Therning预计在今年十一或者十二月其1.0版本发布之后,其适用范围将推广到更多应用程序类型当中。在最近的一次邮件采访中,他回答了记者就RoboVM提出的各项问题。
记者: 在iOS上运行Java代码到底存在着哪些局限?
Therning: 苹果公司自2010年年末起开始允许开发者在应用当中嵌入翻译程序,而且这些应用当中还嵌入有所有运行所需的脚本内容,这相当于大大削弱了iOS对于Java的限制力度。但即使原有限制条件仍然存在,RoboVM也仍然能够发挥良好的实际效果——因为它并不需要启动其它可执行文件,也用不着嵌入任何翻译程序或者在运行时当中对任何代码进行翻译。在RoboVM的支持下,所有字节码都会在开发者的设备上被提前编译为机器码,而最终获得的应用程序成品在构建风格上与Xcode以及Objective-C/Swift打造的原生应用非常相近——换言之,不再具备鲜明的Java应用风格……。我们已经在实践当中证明在RoboVM的作用下,Java与其它JVM语言也能在iOS平台上顺利起效而且丝毫无需违背苹果所制定的iOS开发者计划许可协议。我真的完全没有从苹果的指导性资料中发现任何与之相悖的情况。
记者: RoboVM解决方案中是否包含有革命性的技术成果?如果有的话,您能否具体谈谈?
Therning: RoboVM是目前惟一一套能够帮助开发人员切实使用Java 8中各类新型语言功能的解决方案,其中包括lambdas与default方法。RoboVM的独特之处在于,它能够实现对硬件以及原生iOS API的全面访问,这是借助一系列Java到Objective-C绑定机制完成的。利用这些绑定机制,大家可以利用Java语言实现一切原本能够通过苹果的Xcode以及Objective-C/Swift所实现的应用程序构建需求。
记者: RoboVM方案中是否包括了JavaFX?
Therning: RoboVM让开发人员得以利用JavaFX GUI框架打造出跨平台应用程序,并能够在不同平台之间实现100%代码重复使用率。我们目前正在着力研究LodgOn,希望能让JavaFX同时在iOS以及Android移动设备上顺利起效,获得的结果也相当令人振奋。不过需要强调一点,RoboVM的运行并不依赖于JavaFX。如果大家更倾向于利用原生UI组件进行应用程序开发,那么也可以选择这种替代方式。在JavaOne 2014大会的主题演讲中,我们展示了技术人员如何在利用原生UI开发Android与iOS应用程序的同时,仍然在两套平台间保持极高的代码重复使用率。
记者: 那么RoboVM是如何将自身与Codename One之类的项目区分开来的?根据后者的官方网站,其号称自身能够“将Java字节码翻译成原生C/Objective-C代码并利用Xcode编译机制实现移动应用程序的无缝化开发。”
Therning: 在RoboVM当中,我们为自己的预编译机制选择了一种略有差别的实现方案。相对于Codename One将Java代码翻译为C/Objective-C形式,我们选择充分发挥LLVM项目工具链的固有优势。大家可以将RoboVM看成LLVM的一种前端,其能够将Java字节码翻译成为LLVM位码,后者随后会利用LLVM后端进行优化并被翻译成机器码。LLVM支持所有不同类型的CPU架构与操作系统方案; 从理论层面讲,它足以支撑RoboVM将全部上述环境纳入可用范畴。
但就目前而言,我们仍然把精力集中在iOS身上。通过利用LLVM位码而非C/Objective-C作为过渡阶段——区别于Codename One的作法——我们能够对最终机器码成品进行更为有效的控制,并在代码紧凑性与运行速度上实现远超C/Objective-C的实际效果。