65.9K
CodeProject 正在变化。 阅读更多。
Home

Intel Multi-OS Engine

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.83/5 (4投票s)

2015 年 11 月 2 日

CPOL

4分钟阅读

viewsIcon

17350

本文清晰地表达了如何仅凭您的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支持

  • 从现有库或第三方软件包中的Objective-C和C头文件自动生成Java绑定
  • Java注解 和NatJ运行时库
  • 无需编写JNI 函数
  • MOE中提供了与iOS API接口的预构建jar文件

因此,您可以立即开始用Java编写iOS应用程序!

使用Multi-OS Engine的iOS开发工作流程

这些步骤仅解释了使用Multi-OS Engine创建iOS App的过程,假设您已经了解Android Studio中Android App的构建过程。

  1. 在Android Studio中创建一个Android项目,并添加新配置“Intel Multi-OS Engine Project”以包含iOS App的配置。
  2. 在XCode或Android Studio中Multi-OS Engine的UI设计器中设计iOS的UI
  3. 使用NatJ运行时库将UI绑定到Java。
  4. Android Studio配备了Intellisense功能,可以将操作处理程序绑定到iOS的UI元素。    
  5. OS X开发机器上支持本地构建,可以在其中调用iOS模拟器。 对于Windows开发系统,支持远程/云构建。
  6. 然后,iOS应用程序可以在集成到Android Studio中的模拟器上通过Multi-OS Engine配置运行,也可以直接在设备本身上运行。
  7. 直接在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,并专注于特定应用程序的业务逻辑。

© . All rights reserved.