我们在开始我们的 Android 项目时查看了 Appcelerator。我们知道接下来我们必须做一个 iOS 客户端,所以 Appcelerator 很诱人。
我们决定不走这条路,因为它不支持每个设备的所有原生功能。
例如,我们很早就决定在 Android 中的用户界面需要一个小部件。 Appcelerator 不支持该功能,因为它特定于 Android。 [这是几个月前的事了——你可能想再检查一次]。
在用户界面上妥协对我们来说太过分了。我们决定将 C/C++ 用于应用程序逻辑并使用 Android SDK 作为用户界面。
我们的应用现在有两个部分:“大脑”尽可能多地使用 C/C++ 和用于 UI 的原生(Android/Cocoa Touch),以利用 UI 体验。
当然适用于可以集成 C/C++ 的平台。
分离建议:首先设计您的用户界面,然后找到可以实现它的工具。用户对便携式设备中的 UI 有很高的期望。尽早妥协可能是您项目的 KOD。
[编辑] 我经常看到有人对这个问题投赞成票。我想更新一下我们在过去两年中学到的东西:
- 将 C/C++ 用于我们应用程序的公共部分已经得到了回报。它确实需要稍微复杂的构建过程,但如果共享的代码很复杂(如我们的例子),则节省的成本是巨大的。
- 对于用户界面部分,我们开始研究混合应用程序(HTML 中的一些 UI 元素)。关于 HTML 界面仍然存在争议(Facebook 和 LinkedIn 是两个迁移到 UI 的本地代码的),但也有一些报告说,如果仔细选择它就可以工作。 Flipoard 对此进行了精彩的演讲;带幻灯片here。
2014 年 10 月更新
2014 年 3 月,Smashing Magazine 发表了一篇优秀的文章,比较了原生 iOS、原生 Android、PhongeGap (Cordova) 和 Appcelerator Titanium。它们展示了在每个环境中开发一个简单的应用程序。
这是the last part of the series。在这部分的顶部有指向该系列前面部分的链接,在底部是方法的比较。最后还有来自读者的有趣的cmet。
2015 年 5 月更新
这个问题仍然经常得到支持,所以我想分享自我写下答案的第一部分以来我们所做的工作。
我们现在正在开发一个也有网络客户端的项目。我们现在有了 iOS 客户端、Android 客户端以及 Web 客户端。
JavaScript 是 Web 客户端的自然选择。
由于我们希望在这些客户端之间共享尽可能多的代码(在业务逻辑层),这意味着我们需要找到一种在 iOS 和 Android 中运行 JavaScript 代码的方法。
这就是我们最终要做的。
这是我们如何处理它的摘要:
- 对于所有客户端:所有数据结构都使用Google's protobuf 定义。这允许为 iOS 和 Android 自动生成序列化/反序列化代码。
- iOS:在 JavaScriptCore 的帮助下运行 JavaScript 代码(一个很好的概述 here)。
- Android:借助 Google 的 V8 引擎运行 JavaScript 代码。
JavaScript 和 iOS/Android 层之间的桥梁可能是一个瓶颈,尤其是对象的序列化。我们必须优化一些东西并吸取一些教训才能避免麻烦。
总的来说,体验是积极的。通过在所有客户端共享代码,我们节省了大量时间。
如果我不得不开始另一个像这样的项目(需要与网络和移动客户端共享代码),我也会看看what Google did for inbox。我们开始时它不可用。看起来很有希望。
2015 年 8 月更新
世界一直在转动......
如果我现在必须启动一个新的移动应用程序,我也会好好看看 React Native。
它基于 JavaScript,更轻松地连接 Web 和移动开发。
有一个great tutorial in Ray Wenderlich's site。
2016 年 2 月更新
我的跨平台开发候选名单只有两个:
我一直在关注ionic,因为我们的 Web 应用程序使用 AngularJS 和 ionic (Cordova + AngularJS)。 React Native 将迫使团队学习另一个框架(当然,如果您的 Web 应用程序使用 React,则说法相反)。
尽管如此,我会认真考虑React Native,甚至不得不学习另一个框架,因为报告的应用程序的性能和外观。来自 React Native 的网站:
使用 React Native,您可以使用标准平台组件,例如
作为 iOS 上的 UITabBar 和 Android 上的 Drawer
如果您现在开始,我建议您花时间至少完成他们的教程,以便您更好地了解每个框架。每个教程可以在一到两个小时内完成:
对于更简单的方法:Smashing Magazine 刚刚发布(在我编写此更新时)a good article 展示了如何使用本机导航元素使应用程序感觉(嗯...)原生,同时使用 Web 视图渲染内容。本文详细介绍了如何使 HTML/CSS 在移动设备中可用(它不仅仅是推送您已经拥有的 HTML/CSS)。