【问题标题】:Xamarin: comparison to native SDK and JS-based frameworksXamarin:与原生 SDK 和基于 JS 的框架的比较
【发布时间】:2014-05-02 02:15:25
【问题描述】:

因此,使用 AndroidiOS 提供的原生 SDK 进行编码的主要特点之一是,您不仅可以获得更好的性能,而且还可以获得每个平台的外观和感觉:例如,在iOS,一个标签导航栏将位于屏幕底部,而在Android,它位于顶部(是的,我知道它也可以是顶部底部,但你明白我的意思),或者 Navigation Drawer 停靠栏是一种 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。

任何额外的解释都会很棒,在此先感谢。

【问题讨论】:

    标签: c# android ios xamarin.ios


    【解决方案1】:

    我在去年(2013 年)内构建了一个包含不同组件的大型应用程序:主要是一个 API(ASP.NET Web API => C#)、一个网站(ASP.NET MVC => C# + AngularJS),以及两个适用于 Android (Xamarin.Android => C#) 和 iOS (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 应用程序的基础,您可以从底层操作系统抽象数据访问或网络通信等内容。

    就速度和用户界面而言,您没有任何劣势,因为您使用的是 1:1 原生 API。 iOS 或 Android 上可用的任何内容也可通过 Xamarin 获得。例如,每当 Apple 发布新版本的 iOS 时,Xamarin 都会在几天内发布相应的更新,因此您无需等待就能使用 Apple 新推出的功能。

    Xamarin 在 iOS 上使用一种称为提前编译的技术,因此您在 C# 中编写的所有内容在部署到您的设备之前都会被编译为本机 iOS 内容。这意味着“本机”Objectice-C 应用程序和 Xamarin 应用程序之间执行的内容没有区别(除了一些小的开销,根据我的经验,这并不值得注意)。

    在 Android 上,即时编译也与任何其他“原生”Android 应用程序一样使用。

    这意味着如果您使用 Objective-C 或 Java,您将拥有所有完全相同的 API 和可能性。您甚至可以使用相同的对象来构建具有完全相同类型和名称的 UI(有时稍微优化 ;))。因此,如果您想要应用程序的标签栏导航 - 您可以使用 UITabBarController。参见iOSXamarin

    在使用 Xamarin 多年后,我只有一个缺点:

    可能的内存泄漏。他们的整个样本都是关于防止内存泄漏的基本基础的一堆废话。如果您在应用程序中使用“昂贵的资源”,例如媒体文件,您应该从一开始就小心。当我的一个应用程序已经发展到多达 35 个不同的(复杂的)对话框时,我必须摆脱所有这些问题。这花了我将近两个月的时间,换句话说,就是几千美元。 They provide some documentation 关于它,但在这方面工具很差。而且很可能会出现错误并且很难被发现 (example)。

    但总的来说,使用 Xamarin 是我最好的决定之一。

    【讨论】:

    • 感谢您对您的体验的全面解释,这真的很有帮助:)
    • 如果您是个人开发者(或小公司),您应该查看 Indie 许可证。它们比 Business 许可证(如上所述)便宜(两种产品均为 600 美元)。
    • 让我困惑的是内部部署业务功能。我能否使用独立许可证为 Apple 的企业部署签署构建版本?
    • @asp_net Xamarin 目前是免费的,并且随 Visual Studio 社区版一起提供。 blog.xamarin.com/xamarin-for-all 。也许你可以回来进行编辑:)
    【解决方案2】:

    我用 Xamarin 编码已经有一段时间了。到目前为止它很棒。我遇到的任何问题我都想通了,因为 c# 是我的母语。 Xamarin 网站提供了所有平台上许多功能的许多示例和 API 参考。

    1. 性能 - 您可以通过使用 Xamarin 获得本机性能。无话可问。我一直在使用它为我正在开发的新应用程序创建音频、视频和照片录制功能。 Xamarin 将 c# 代码处理为所有平台的本机字节代码。这就是如何实现的。

    2. 外观 - 您的应用程序的外观将是原生的。从字面上看,您必须使用 Android xml 格式来制作您的用户界面,并且同样适用于 IOS。您仍然可以像在每个平台上一样为您的元素设置样式。 Xamarin 所做的只是为您将视图链接到事件。

    3. Api - Xamarin 的美妙之处在于 API。他们将整个 Android 和 IOS 命名空间移植到 c#。看看他们的Documentation

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

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

    如果您有 java 背景,那么重温您的 c# 技能将是一件轻而易举的事。

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

    祝你好运

    【讨论】:

      【解决方案3】:

      有更多的互联网内容、帮助和对本机的支持。仅此一项就可以帮助我做出选择。如果您真的很擅长 Xamerin,那么您编写的代码可能有 70% 可供两个应用程序使用,您仍然需要为每个应用程序定制内容。

      但同样,对原生的支持是如此广泛,以至于如果您遇到问题,其他人也会遇到问题。

      有了 xamerin,好吧,祝你好运。

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

      【讨论】:

      • 这是 Xamarin 的优点之一,使用本机示例。您必须将本机代码重构为 C#,但功能是相同的。
      • @SKall 这是真的,你说得很好。而且他们通常会更新新的 SDK。但是,如果他们出于任何原因放慢了更新速度……哈哈,我想您必须对他们有信心才能使他们的产品保持在标准水平。定价也很痛苦,但就像其他人说的那样,你得到你所支付的。为了我?我做了这么多的开发,在这一点上,我基本上只是制作 UI,放入我的自定义库,配置一下,应用程序就可以使用了。在一个常见的应用程序上,我 2/3 的代码是可重用的和抽象的,所以我可以放下就走。
      • 在寻求有关 Xamarin-droid 的帮助时,我几乎完全坚持原生社区,几乎都是一样的,当你看到本地人在 Java 尴尬中挣扎时,你也会有一种模糊的感觉(匿名内部类,没有 LINQ 或异步等),并且可以轻松放入 C# 优雅中。
      • @tempy Java 的笨拙是让 Java 对了解它的人如此有用和强大的部分原因。不过,我也喜欢 C#。
      猜你喜欢
      • 2011-11-11
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-06
      • 2011-02-10
      • 1970-01-01
      相关资源
      最近更新 更多