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

因此,使用AndroidiOS提供的原生SDK进行编码的主要function之一就是您不仅可以获得更好的性能,还可以获得每个平台的外观和感觉:例如,在iOS ,可以使用Tab键导航酒吧将位于屏幕的底部,而在Android它位于顶部(是的,我知道它也可以是顶部底部,但你明白我的观点),或者导航抽屉docker是Android的导航风格而(据我所知)在iOS本机sdk中没有任何类似的东西。 我的意思是, 你可以通过他们的devise指南来感受到平台的差异,这是一件好事,因为它使你的应用看起来很专业。

因此,考虑到性能和保持应用程序的感觉,使用基于JS的框架(如TitaniumPhoneGap)将不会是明智的select。

然后来了Xamarin 。 正如我在这里读到的: Xamarin如何获得原生的外观和感觉? 它似乎是一个原生SDK的C#包装,据我所知,它不应该影响性能。 但外观和感觉部分在哪里。 由于XML布局不完全是AndroidiOS应用程序的感觉,而且导航(来自控制器类)导致Xamarin如何处理这些? 据说在他们的网站上,你可以在平台之间分享代码,但这也意味着我必须分享导航系统和类似的东西吗?

最后,为了“不为每个平台编写代码” ,是不是应该使用原生SDK并且使用Xamarin (我没有为iOS和Android编写代码真的有问题),还是这个框架目标对于C#开发人员,他们不必学习Objective-C或Android。

任何额外的解释将是真棒,并提前感谢。

Solutions Collecting From Web of "Xamarin:与原生SDK和基于JS的框架进行比较"

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

正如你在上面的列表中看到的,几乎所有事情都是用C#完成的(好的,网站主要是用JavaScript编写的;-))。 这是一个非常好的成熟语言,具有非常好的function(如LINQ)。 在我的情况下,变得很清楚:我不必学习和完善四种语言(Swift / Objective-C,Java,C#,JavaScript),但只有两种:C#和JavaScript。

特别是在代码共享方面,我们的客户端应用程序并不是真正的瘦客户端,因为一些离线function需要大量的同步逻辑,所以两个应用程序的UI部分只是奖牌的一面。 事实certificate,我真的可以在iOS和Android上使用90%的非接口代码。 这是一个非常巨大的好处,因为它不仅关于Swift / Objective-C或Java的某些语言原创性,还关于您在iOS和Android上使用的不同框架。 要使用.NET Framework / Mono作为每个Xamarin应用程序的基础,您可以从底层操作系统抽象数据访问或networking通信等内容。

就速度和用户界面而言,您没有任何缺点,因为您使用的是本地API 1:1。 无论在iOS还是Android上都可用,通过Xamarin也是可用的。 而且,例如苹果公司发布iOS版本的新版本,Xamarin将会在几天内发布更新版本,所以你不必等待苹果公司新推出的function。

Xamarin在iOS上使用了一种名为“时间编译提前”的技术,因此,在C#中编写的所有内容都将在部署到设备之前编译为本机iOS内容。 这意味着在一个“原生”的Objectice-C应用程序和一个Xamarin应用程序之间执行什么操作没有任何区别(除了一些小的开销,这从我的经验来看并不值得注意)。

在Android即时编译中,与其他任何“本地”Android应用程序一样,也是如此。

这就意味着,如果您使用Objective-C或Java,那么您将拥有完全相同的API和可能性。 你甚至可以使用相同的对象来构build你的UI,使用完全相同的types和名称(有时会稍微优化;))。 所以,如果你想为你的应用程序的标签栏导航 – 你使用一个UITabBarController。 查看iOS与Xamarin 。

在与Xamarin的路上多年以后,我只有一个缺点:

可能的内存泄漏。 他们的整个样本都有一堆关于防止内存泄漏的必要基础的废话。 如果您在应用程序中使用媒体文件等“昂贵的资源”,则应从第一天开始谨慎处理。 当我的一个应用程序已经增长到35个不同(复杂)的对话时,我必须摆脱所有这些问题。 这花了我差不多两个月的时间,换句话说就是几千块钱。 他们提供了一些关于它的文档 ,但是工具在这方面很差。 错误很可能会出现,很难find( 例如 )。

但总的来说,这是我与Xamarin合作的最佳决定之一。

我已经用Xamarin编码了一段时间了。 迄今为止,这是非常棒的。 我遇到的任何问题都是因为c#是我的母语。 Xamarin站点有许多示例和API参考,适用于所有平台上的许多function。

  1. 性能 – 您使用Xamarin获得本机性能。 无话可问。 我一直在使用它为我正在创build的新应用程序创buildaudio,video和照片录制function。 Xamarin将C#代码处理为所有平台的本地字节代码。 那是如何实现的。

  2. 看 – 你的应用程序的外观将是本地的。 你从字面上必须使用Android xml格式来制作你的用户界面和相同的Goes for IOS。 您仍然会按照您在每个平台上所做的相同方式来devise您的元素。 Xamarin所做的一切都是为了给你一个事件链接。

  3. Api – Xamarin的美丽在于API。 他们将整个Android和IOS命名空间移植到c#中。 看看他们的文档 。

  4. 昂贵 – 我唯一的问题与Xamarin是昂贵的。 如果你检查他们的定价是离谱的。 但你得到你所支付的。 一种由支持支持的高级产品。

  5. C# – 夏普是一个伟大的语言,有大量的支持。 新的asynchronous/等待获取整个线程pipe理问题。 Json处理在平台上是非常容易的。 我已经上传了几个可以用于许多应用程序的Github类。

如果您是来自java背景,那么刷新您的C#技能将是一件轻而易举的事情。

Rdio应用程序是用Xamarin创build的。 在Android和IOS上下载并testing其性能,并享受其原生外观。

好运

有更多的互联网内容,帮助和本地支持。 这一点帮助我做出select。 如果你真的擅长Xamerin,那么你编写的代码中有70%可以被这两个应用程序使用,但是你仍然需要为每个应用程序定制一些东西。

但是,对本土的支持又是如此巨大,如果遇到了问题,其他人也会遇到问题。

用xamerin,祝你好运。

当我说的应用程序,我的意思是iOS / Android