使用一种编程语言(C#)针对多个移动平台进行定位/开发?成本效益?

时间:2011-03-17 06:45:40

标签: .net android windows-phone-7 xamarin.ios xamarin.android

今天,可以将C#编程用于多个移动平台,例如:

(如果我错过了一些,请随时编辑) 当然,它仍然是UI的编程工作,但可以共享主要的应用程序库。

我们都要感谢聚集在Mono项目和超级英雄Miguel de Icaza的团队,他们的努力是无价的。

困扰我的是,这些选项的好处是什么? 在多个移动平台上维护一个应用程序的成本是否较低,然后必须单独编写每个库以获得更好的性能。每种语言的学习曲线?作为所有行业的杰克vs .NET Ninja

或者知道在原生环境中编程的应用程序的二进制文件的大小较小,甚至可能更好地进行优化,而不是忘记您必须等待新平台操作系统更新的支持。

更新:显然还有一件事需要考虑,那就是支持。由于Novell被Attachmate Group收购,所有Mono团队都被解雇了。然而,团队的核心成员由Miguel De Icaza founded new company Xamarin领导,这将从头开始重塑Mono Mobile开发工具。

8 个答案:

答案 0 :(得分:19)

在我看来,使用单一环境(即C#/ .NET)的最大优点是代码可移植性。像LINQ这样很酷的东西,一旦你习惯了它,你就不能没有。但是,少数移动操作系统(iOS,Android,WP7)在UI方面有很大不同。

而且,如果我没有弄错你的应用程序,那么如果要在移动设备上运行,它就会得到相当多的UI交互。大多数移动应用程序都是80%的UI代码。

因此,您最终还是会为每个平台编写一组单独的UI代码 - 例如,您将使用Silverlight WP7编写(以及所有WPF优点),您将编写完全不同的Cocoa中的iOS代码集(IB,视图,控制器和东西),你将为Android编写一组完全不同的代码。

我的经验一直是在任何平台上编写优秀的UI代码需要很多经验 - 例如学习WPF / SL已经是噩梦了,扔进Cocoa Touch和整个Android乱七八糟的东西。当然,你可以编写三组外观和感觉相当相似的用户界面,但很可能你会非常努力地重用代码并拥有通用的数据结构,与专用应用程序相比,你的用户界面最终会低于标准 - - 在今天的移动应用程序世界中,非超级(更不用说低于标准杆)的UI体验意味着您的应用程序会死亡。

此外,所有三种移动环境都有不同的连接范例,以及多媒体范例。你最终写了三个版本,并学习了三个环境,尽管用你熟悉的一种语言写作。

您要重用的最多是后端模块。决策引擎,搜索例程,数据管理等等。甚至这些也会有问题,因为您将有力在数据结构中做出妥协,只需在三种不同的UI范例上轻松集成三种不同的UI代码集。例如,您是否使用DependencyObjects来绑定MVVM模型中的Silverlight视图?如果你这样做,它将不适用于Cocoa的MVC模型,你必须单独编写这些绑定。

由于并非所有移动环境都能让您使用全套功能 - 例如,MonoTouch for iOS不具备在编译时无法确定的通用构造。您实际上是在使用.NET的一小部分(并且必须不断提醒自己在哪里可以使用哪些功能),这样您就可以在三个不同的平台上运行它们而无需进行重大更改。

现在,在为WP7平台编写时,图像具有所有这些限制,WP7平台支持整个.NET功能集。我不了解你,但我会发疯的。而且你的WP7应用程序永远不会与其他应用程序竞争。

在我看来,痛苦和妥协是不值得的。你最终会得到三个一般的应用程序,这两个平台的人都不会喜欢。

除非所有优点都在于你的应用程序的后端逻辑,并且人们为了获得应用程序的后端功能而忽略UI问题是非常好的。根据我的经验,这几乎不会发生。

答案 1 :(得分:2)

对我来说,最大的优势是能够在移动平台之间重用业务逻辑和通信代码。是的,我必须一遍又一遍地编写UI,并且需要时间来解决这个问题,但至少我的基础平台是可重用的。

根据我在迁移到新平台时的经验,学习UI框架比学习新语言要花费更长的时间。

答案 2 :(得分:2)

自2011年编写accepted answer以来,出现了几个不同的框架,它们将MVC和MVVM模式引入Mono for Android和MonoTouch,这对于为这些目标开发应用程序有很大帮助。 / p>

对于MVC,请查看名为MonoCross

的项目

对于MVVM,请查看Stuart LodgeMvvmCross

后者包含大量用于在三个平台上打开图像的代码,包括电子邮件,打开网页浏览器,播放声音等等。它还可以处理ViewModels之间的导航。

答案 3 :(得分:0)

一个很大的优势当然是跨平台的代码/类库的可重用性。考虑到这一点,您能够更快地移植/开发应用程序,从而降低成本。

此外,由于代码的可重用性,它将减少维护费用。

答案 4 :(得分:0)

Monotouch / Droid库有一些缺点。有一点速度挫折(约5%,在大多数情况下可忽略不计)。

根据我的经验,尺寸差别不大。大部分的大小都在资源(数据资源,打包图像等,而不是处理器使用情况),并且大多数应用程序都没有携带那么多资源(因为加载时间和可用性)移动平台上的许多默认控件)。

我认为你不应该在游戏中使用框架。我在移动游戏开发方面没有太多经验,但是你在游戏开发中使用的相当不同的框架(XNA,Android的NDK ......)以及对系统资源(处理器使用,内存等)的需求使它们变得毫无用处IMHO。

答案 5 :(得分:0)

优点:

  • 所有相同语言的代码和(大部分)可在每个平台上使用
  • 缩短开发时间
  • 便宜

缺点:

  • 包含所需的库会极大地增加最小应用程序的大小 - 如果你的app会很大,那么差异就不会那么显着了
  • 性能开销

如果你有钱和人,最好让一些人专注于iPhone和Objective-C,一些Android和Java等。这样你的程序员就会对你所针对的平台有深入的了解,并且会能够确保您的应用程序充分利用平台的功能 - 应用程序不应该在所有平台上完全相同(除了游戏),您需要发挥自己的优势和劣势:iPhone应用程序应该看起来和功能像iPhone应用程序等。

也就是说,如果你没有人或者钱,使用单一语言和几个框架肯定会更便宜,更快,并且可能比单独尝试为每个平台单独开发的结果提供更好的结果

答案 6 :(得分:0)

另一种看待这种情况的方法是使用WebORB集成服务器将现有的.NET / C#应用程序移植到各种移动客户端(本机和非本机)相对容易。在客户端,您必须使用本机语言编写代码,或者您可以创建一个在不同的移动操作系统(例如iOS,Android和BlackBerry PlayBook)上相当便携的Adobe AIR应用程序。

答案 7 :(得分:0)

跨平台解决方案仅适用于您的应用程序简单明了的情况。 如果您需要复杂的功能,例如带有复杂对象图的本地数据存储,请使用本机或预计花费数月时间来调试问题