Intel Multi-OS Engine






4.83/5 (4投票s)
本文清晰地表达了如何仅凭您的Java技能开发适用于iOS和Android的跨平台原生应用。
引言
不久前,Intel在2015年波士顿Android开发者大会 (Andevcon) 上发布了Multi-OS Engine。它使您能够使用Java为iOS和Android开发原生移动应用。
开发同时适用于iOS和Android的原生移动应用并非易事,成本也不低。 您可以构建两个独立的原生应用,以更高的成本获得原生外观和体验。
然而,即使对于拥有大量资源的大公司来说,这种选择也被证明是困难的。这种情况可能会发生改变。开发者现在有机会预览 Intel的Multi-OS Engine (MOE),该引擎旨在大幅减少构建独立iOS和Android原生应用所需的开发时间。
Multi-OS Engine为您的跨平台需求提供了一个全面的解决方案。
为什么原生如此重要?
现代移动用户很容易被吸引。任何平台的应用商店都充斥着大量的克隆应用。如何从中脱颖而出?我宁愿选择在外观和感觉上与平台其余部分更一致的东西。 即使开发原生移动应用需要更长的时间,原生外观和体验正是最终用户感兴趣的。因此,在这方面节省是不可能的。由于几个原因,原生应用程序在这方面具有显着的优势
- 直接访问特定于平台的UI组件,例如导航堆栈、日期和时间选择器、地图等。可以在Web上重新实现这些组件,但我们的重新实现永远不会像它们的原生版本那样,而且它们也不会随着平台的更改而自动更新。
- 缺少与UI渲染相关的开销。
- 原生多线程。基于Web的框架不允许像使用原生代码那样好地并行化应用程序。
为什么选择Java?
GitHub基于存储在其存储库中的代码量对语言进行的排名清楚地解释了Facebook选择Javascript来开发React Native,以及Intel选择Java来开发Multi-OS Engine作为跨平台语言的原因。
Java如此流行的主要原因之一是大量现有的代码,例如库、示例和开源应用程序,可供Java开发人员使用。
技术概述
Multi-OS Engine可以作为独立插件集成到Android Studio中。 应用项目可以像Android Studio中的Android项目一样简单地启动,并且Multi-OS引擎配置该项目以在iOS模拟器上构建和运行为iOS应用程序,该模拟器也可以从Android Studio调用。 因此,您不一定需要了解Objective-C才能为iOS构建原生应用。 因此,Android开发不会发生任何变化。 此外,您还有一个极好的机会来重用所有与平台无关的代码。 MOE不提供100%的代码重用。 但是,通过适当的应用程序体系结构,此值可以达到60%。
Multi-OS Engine通过以下方式促进iOS上的Java支持
因此,您可以立即开始用Java编写iOS应用程序!
使用Multi-OS Engine的iOS开发工作流程
这些步骤仅解释了使用Multi-OS Engine创建iOS App的过程,假设您已经了解Android Studio中Android App的构建过程。
- 在Android Studio中创建一个Android项目,并添加新配置“Intel Multi-OS Engine Project”以包含iOS App的配置。
- 在XCode或Android Studio中Multi-OS Engine的UI设计器中设计iOS的UI
- 使用NatJ运行时库将UI绑定到Java。
- Android Studio配备了Intellisense功能,可以将操作处理程序绑定到iOS的UI元素。
- OS X开发机器上支持本地构建,可以在其中调用iOS模拟器。 对于Windows开发系统,支持远程/云构建。
- 然后,iOS应用程序可以在集成到Android Studio中的模拟器上通过Multi-OS Engine配置运行,也可以直接在设备本身上运行。
- 直接在Android Studio中调试您的iOS应用程序。
代码片段
如果您是一位经验丰富的Java开发人员,所有这些Objective-C的东西可能会令人困惑
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"showDetail"]) {
NSIndexPath *selectedIndexPath = [self.tableView indexPathForSelectedRow];
// Set data
...
}
}
现在,想象一下用Java编码的相同功能
@Override
public void prepareForSegueSender(UIStoryboardSegue segue, NSObject sender) {
if (segue.getIdentifier().toString().equals("showDetail")) {
NSIndexPath selectedIndexPath = getTableView().indexPathForSelectedRow();
// Set data
...
}
}
看起来很相似,不是吗? 但是对于Java开发人员来说,它要熟悉得多。 这意味着您可以轻松地将任何与UI相关的Objective-C代码移植到Java,并专注于特定应用程序的业务逻辑。