移动应用程序 - 针对 iPhone、WP7、Android 和 Blackberry
Posted
技术标签:
【中文标题】移动应用程序 - 针对 iPhone、WP7、Android 和 Blackberry【英文标题】:Mobile App - Targeting iPhone, WP7, Android, and Blackberry 【发布时间】:2011-07-21 12:34:45 【问题描述】:有没有一种健全的方法来开发跨平台移动应用程序?我们希望这些是每个平台上的原生应用,而不一定是某种网页。
目前我们正在考虑将其拆分为两种语言:
C# 后端(业务逻辑) --> WP7 的标准 C# 应用程序 --> 基于 MonoTouch 的 iPhone/iPad/等应用程序。 Java 后端(业务逻辑) --> 标准 android Java 应用程序(C# 的 MonoDroid 版本未准备好 然而) --> 标准黑莓 Java 应用程序我们也可以最初使用 C# 进行开发,然后使用其中一种转换工具将我们的 C# 转换为 Java 作为起点。
还有其他方法吗?我们的技能主要包括强大的 C# .Net 背景和少量 Java 经验。
我们真的不想走低级并使用 C/C++ 之类的东西来完成工作。这些通常是与某些 Web 服务通信的简单 LOB 应用程序。
附带问题:像《愤怒的小鸟》的制作者这样的游戏开发者是如何做到的?
更新:
MonoDroid 现已正式发布。因此,您似乎只需要为 BlackBerry 使用 Java。我们正在考虑完全不为 BlackBerry 开发,因为其他 3 个平台的开发已经简化。肯定会涉及一些费用,因为 MonoTouch 和 MonoDroid 都是 399 美元,而且您还需要 Visual Studio 的许可证(这不包括 App Store 的费用等)。
【问题讨论】:
阅读***.com/questions/4221315/… 这是一个较小范围的问题,但很好地解释了我对跨平台主题的看法。 是的,我很高兴我们从一开始就计划这样做。我们当然希望将特定于 UI 设备的代码与可重用代码分开。 【参考方案1】:据我所知,对于所有移动平台,没有一个好的简单答案。您可以使用像 Appcelerator Titanium 这样的开发环境,它可以在各种平台上交叉编译为本机代码(例如,现在,我认为 Titanium 支持 ios 和 Android,并计划支持黑莓)。但是,这些通常只有有限的 API 可供您访问,并且您最终仍需要为不同的平台设计不同的 UI(在我的商业工作中,我从未成功使用过这样的平台)
您还可以在 Web 服务后端设计所有业务逻辑,然后为每个平台编写“瘦客户端”应用程序。这可行,但当最终用户想要使用您的应用程序时,当然需要网络访问权限。 (通常它会在那里,但有时可能不会)
最终,我通常会按照您的建议去做——尽可能通用地用几种不同的语言编写基本业务逻辑,然后将其与每个平台的自定义 UI/设备代码捆绑在一起。自己还没有找到更好的方法....
(顺便说一句,我相信像愤怒的小鸟这样的游戏主要是用 OpenGL 编写的,然后加载到每个平台上的 OpenGL 处理器上。但我可能弄错了……)
【讨论】:
嗯,我希望有更多的“圣杯”,但看起来没有这样的事情。如果没有其他建议,我可能会将您标记为答案。 是的,我认为跨移动平台开发的“圣杯”是一个神话。也许某个时候...... Appcelerator 的替代品是 PhoneGap。但是您似乎很确定不使用这些工具。我只是想如果有人在将来搜索此线程并正在寻找替代方案,我会提到这一点。【参考方案2】:这些是一些很好的答案。我同意,x平台的开发还是很原始的。我想补充两点:
1) 您不需要用不同的语言编写后端。选择一种语言(根据您的舒适度、性能等标准),然后从您的平台特定应用程序直接连接到后端。如果您的后端是服务器端代码,那么与之交谈的一种方式是通过 XmlHttpClient。如果它是一段跨各种应用程序通用的本机代码,并且是用 C++ 编写的,那么您可以使用 Java 中的 JNI 和 C# 中的包装程序集。
2) 避免使用 x 平台工具的另一个原因是,您总是需要等待它们支持平台供应商(Apple、Google、MSFT 等)发布的新 API。一旦这些公司发布了新的 API,就需要更新工具,然后您才能使用新的 API。
【讨论】:
服务器端的东西都将是 C#(或任何我们想要的)。我应该更清楚,但是“后端”是指与我们的服务器通信并具有一些用于表示来自服务器的数据的类的业务层。这是将以 2 种语言复制的部分。我绝对同意我们要避免使用 x 平台工具,因为它们在某些方面都不尽如人意。 我仍然会尽量避免重复层(当您已经在为每个平台处理重复的 UI 层时,更容易维护)。这就是我要做的:UI 层 -> 业务逻辑层 -> 数据访问层 -> DB,并让不同的 UI 层通过 Web 服务与同一个业务逻辑层进行通信。 提供与 Web 服务通信的代码将是两种语言之间唯一的重复代码。您可以将 web 服务从图片中拉出来,因为我们可以按照我们的意愿开发它。我只是指专门在每个设备上运行的代码。【参考方案3】:如果您没有在自己的应用程序的 WebView 中使用一些 html5(jquerymobile 等),我认为这(很容易)是不可能的(看起来像一个真正的应用程序,但您仍然会以某种方式看到它不是)而不是普通的浏览器。您仍然可以使用设备中的一些本机 API(加速度计,...)。
有像Sybase Unwired Platform 这样的(商业)平台可以帮助您生成一些客户端代码。 Afaik for Blackberry 和 Windows Mobile 甚至可以从服务器上的业务对象生成一些 UI。但对我来说,这听起来可能对你的情况来说太重了。
问候, 马丁
【讨论】:
我认为我们希望避免使用 HTML5,因为我相信我们的客户会希望在后台做更高级的事情,等等。以上是关于移动应用程序 - 针对 iPhone、WP7、Android 和 Blackberry的主要内容,如果未能解决你的问题,请参考以下文章