Xamarin: 与原生SDK和基于JS的框架的比较

7
因此,使用AndroidiOS提供的本机SDK编码的主要特点之一是,您不仅可以获得更好的性能,还可以获得每个平台的外观和感觉:例如,在iOS上,选项卡导航栏位于屏幕底部,而在Android上则位于顶部(是的,我知道它也可以是顶部底部,但您懂我的意思),或者还有抽屉式导航是Android导航样式,而在iOS本机SDK中似乎没有类似的东西。我的观点是,通过设计准则,您可以感受到平台的差异,这是一件好事,因为它使您的应用程序看起来专业。
因此,在考虑性能和保持应用程序感觉方面时,使用基于JS的框架如TitaniumPhoneGap将不会是一个明智的选择。
然后出现了Xamarin。正如我在这里阅读的:Xamarin how it is getting the Native Look and Feel?,它似乎是本机SDK的C#包装器,据我所知,它不应影响性能。但是外观和感觉在哪里?由于 XML布局并不完全赋予AndroidiOS应用程序其感觉,而也是导航(来自控制器类)如何处理这些Xamarin呢?他们的网站上说您可以在平台之间共享代码,但这是否意味着我必须分享导航系统和类似内容?
最后,为了“不为每个平台编写代码”,不使用本机SDK并使用Xamarin值得吗(我确实没有问题为iOS和Android编写代码),还是该框架面向的C#开发人员,因此他们不必学习Objective-C或Android。
任何额外的解释都将非常棒,提前致谢。
3个回答

12

我在去年(2013年)构建了一个大型应用程序,包含不同的组件:主要是API(ASP.NET Web API= > C#)、网站(ASP.NET MVC = > C# + AngularJS)和Android和iOS的应用程序(Xamarin.Android => C#,Xamarin.iOS => C#)。使用Xamarin的决定有其优点和缺点,但总体而言,我对此非常满意。

如上面的列表所示,几乎所有内容都是用C#完成的(好吧,网站主要是用JavaScript编写的;-))。这是一种成熟而优秀的语言,具有很好的特性(如LINQ)。在我的情况下,显然:我不必学习和精通四种语言(Swift/Objective-C、Java、C#、JavaScript),而只需要两种:C#和JavaScript。

这在代码共享方面尤为重要:由于某些离线功能需要大量同步逻辑,我们的客户端应用程序并不是真正的轻客户端,因此两个应用程序的UI部分只是其中的一面。结果证明,我确实可以在iOS和Android上同时使用90%的非界面代码。这是一个非常巨大的优势,因为这不仅涉及到Swift/Objective-C或Java的某些语言原始性,还涉及到您在iOS和Android上使用的不同框架。将.NET Framework/Mono用作每个Xamarin应用程序的基础,可以让您从底层操作系统中抽象出像数据访问或网络通信等事物。

在速度和UI方面,您没有任何劣势,因为您使用原生API 1:1。iOS或Android上可用的所有内容都通过Xamarin提供。例如,当Apple推出新版本的iOS时,Xamarin将在几天内发布该更新,因此您无需等待即可使用Apple引入的新功能。

Xamarin在iOS上使用一种称为Ahead of Time Compiling的技术,因此您所编写的所有C#代码都会在部署到您的设备之前编译成本地iOS代码。这意味着在“本机”Objective-C应用程序和Xamarin应用程序之间执行的内容没有任何区别(除了一些微小的开销,我的经验是不值得一提的)。

在Android上,就像其他“本地”安卓应用程序一样,使用即时编译。

这意味着您拥有与Objective-C或Java相同的精确API和可能性。您甚至可以使用相同的对象来构建具有完全相同类型和名称(有时稍微优化)的用户界面。因此,如果您想要为应用程序提供选项卡栏导航,则可以使用UITabBarController。参见iOSXamarin的比较。

在使用Xamarin多年后,我只遇到了一个缺点:

可能会出现内存泄漏问题。他们所有的示例都是关于防止内存泄漏方面的基本内容,但质量很差。如果您正在处理像应用程序中的媒体文件等“昂贵的资源”,则应该从第一天开始注意内存管理。当我的一个应用程序已经发展到35个不同的(复杂的)对话框时,我必须处理掉所有的问题。这花费了我将近两个月的时间,或者换句话说花费了成千上万的美元。他们提供了一些文档关于内存管理的最佳实践,但是工具在这方面很差。错误可能会出现,并且很难找到(例如)。

但总体而言,选择使用Xamarin是我做过的最好的决定之一。


感谢您对您的经验进行了详细的解释,这真的很有帮助 :) - Christopher Francisco
如果您是个人开发者(或小公司),您应该考虑购买“Indie”许可证。它们比上述的“Business”许可证更便宜(两个产品总价为600美元)。 - poupou
让我困惑的是内部部署业务功能。我能用Indie许可证为苹果企业部署签名构建吗? - asp_net
@asp_net 目前Xamarin是免费的,并且随附于Visual Studio社区版。https://blog.xamarin.com/xamarin-for-all/。也许您可以回来进行编辑 :) - thebenman

4

我已经使用Xamarin编程一段时间了,到目前为止非常好。任何问题都能解决,因为C# 是我的母语。Xamarin网站上有许多示例和API参考,适用于所有平台的许多功能。

  1. 性能 - 使用Xamarin可以获得原生性能,毫无疑问。我一直在使用它创建音频、视频和照片录制功能的新应用程序。Xamarin将C#代码处理成所有平台的本地字节代码,就是这样实现的。

  2. 外观 - 应用程序的外观将是本机的。 你必须使用Android XML格式来制作用户界面,IOS也是如此。你仍然会像在每个平台上做的那样样式化你的元素。 Xamarin所做的就是为你链接视图到事件。

  3. API - Xamarin之美在于API。他们将整个Android和IOS命名空间移植到了C#中。看一下他们的文档

  4. 昂贵 - 我对Xamarin唯一的问题是它太昂贵了。如果你查看他们的定价,那是离谱的。但你得到你所付出的。一个由支持支持的高级产品。

  5. C# - Sharp是一种具有大量支持的优秀语言。新的async / await解决了整个线程管理问题。Json处理在平台上非常容易。我在Github上上传了几个可用于许多应用程序的类。

如果你来自Java背景,那么提高你的C#技能将很容易。

Rdio应用程序是使用Xamarin创建的。在Android和IOS上下载它,测试其性能并享受其本地外观。

祝你好运


1

互联网上有更多的内容、帮助和支持,这些都是为本地应用程序提供的。这些就足以帮助我做出我的选择。如果你真的很擅长Xamarin,也许你写的代码中有70%可以用于两个应用程序,但你仍然需要为每个应用程序量身定制。

但是,对于本地应用程序的支持是如此之广泛,以至于如果你遇到问题,别人也一定遇到过。

而对于Xamarin来说,好运吧。

当我说应用程序时,指的是iOS/Android。


2
这是 Xamarin 的一个好处之一,可以使用本地示例。您将不得不将本地代码重构为 C#,但功能是相同的。 - SKall
@SKall 这是真的,你说得很好。他们通常会及时更新新的SDK。但如果由于任何原因他们减缓了更新速度...哈哈,我想你必须对他们保持信心以保持其产品达到标准。此外,定价也有些高,但就像其他人所说,你得到你所付出的。对我来说?我已经做了很多开发,所以现在基本上只需制作UI,放入我的自定义库,进行一些配置,应用程序就可以运行了。在普通应用程序中,我的代码有2/3是可重用和抽象的,所以我可以轻松使用。 - WIllJBD
当我在寻求Xamarin-droid的帮助时,我几乎完全依赖于本地社区。这几乎都是相同的,并且当您看到本地人民在Java笨拙(匿名内部类,没有LINQ或async等)方面挣扎时,您也会感到一种模糊的感觉,并且可以轻松地使用C#-优雅地解决问题。 - tempy
@tempy,Java 的这种笨拙性是使得那些了解它的人能够将其变得非常有用和强大的一部分。然而,我也喜欢 C#。 - WIllJBD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接