我们在开始我们的 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 对此进行了精彩的演讲。这里有幻灯片。
2014 年 10 月更新
2014 年 3 月,Smashing Magazine 发表了一篇优秀的文章,比较了原生 iOS、原生 Android、PhongeGap (Cordova) 和 Appcelerator Titanium。他们展示了在每个环境中开发一个简单的应用程序。
这是该系列的最后一部分。在这部分的顶部有指向该系列前面部分的链接,在底部是方法的比较。最后还有来自读者的有趣评论。
2015 年 5 月更新
仍然经常为这个问题投票,所以我想分享自从我写下答案的第一部分以来我们所做的事情。
我们现在正在开发一个也有 Web 客户端的项目。我们现在有 iOS 客户端、Android 客户端以及 Web 客户端。
JavaScript 是 Web 客户端的自然选择。
由于我们希望在这些客户端之间共享尽可能多的代码(在业务逻辑层),这意味着我们需要找到一种在 iOS 和 Android 中运行 JavaScript 代码的方法。
这就是我们最终要做的。
这是我们如何处理它的摘要:
- 对于所有客户端:所有数据结构都使用Google 的 protobuf定义。这允许为 iOS 和 Android 自动生成序列化/反序列化代码。
- iOS:在 JavaScriptCore 的帮助下运行 JavaScript 代码(这里有一个很好的概述)。
- Android:借助 Google 的 V8 引擎运行 JavaScript 代码。
JavaScript 和 iOS/Android 层之间的桥梁可能是一个瓶颈,尤其是对象的序列化。我们必须优化一些东西并吸取一些教训以避免麻烦。
一般来说,经验是积极的。通过在所有客户之间共享代码,我们节省了大量时间。
如果我不得不开始另一个像这样的项目(需要与网络和移动客户端共享代码),我也会看看谷歌为收件箱做了什么。我们开始时它不可用。看起来很有希望。
2015 年 8 月更新
而世界一直在转动...
如果我现在必须启动一个新的移动应用程序,我也会好好看看React Native 。
它基于 JavaScript,可以更轻松地连接 Web 和移动开发。
Ray Wenderlich 的网站上有一个很棒的教程。
2016 年 2 月更新
我的跨平台开发候选名单只有两个:
我一直在关注ionic,因为我们的 Web 应用程序使用 AngularJS,ionic(Cordova + AngularJS)也是如此。React Native将迫使团队学习另一个框架(当然,如果您的 Web 应用程序使用 React,则说法相反)。
尽管如此,我还是会认真考虑React Native,甚至不得不学习另一个框架,因为报告的应用程序的性能和外观。来自 React Native 的网站:
使用 React Native,您可以使用标准平台组件,例如 iOS 上的 UITabBar 和 Android 上的 Drawer
如果您现在开始,我建议您至少花时间完成他们的教程,以便您更好地了解每个框架。每个教程可以在一到两个小时内完成:
对于更简单的方法:Smashing Magazine 刚刚发布(在我撰写此更新时)一篇很好的文章,展示了如何使用本机导航元素使应用程序感觉(嗯...)本机,同时使用 Web 视图呈现内容. 本文详细介绍了如何使 HTML/CSS 在移动设备中可用(它不仅仅是推送您已经拥有的 HTML/CSS)。