我应该为现有的Android应用程序选择Xamarin native或Xamarin.Forms吗?

时间:2016-04-27 19:23:22

标签: xamarin xamarin.ios xamarin.android xamarin.forms

我们有一个Android应用程序,并希望为跨平台重新创建它。

支持或反对Xamarin原生和形式的事实是什么?

本机的优点是,我们可以重用所有的xml-layout而我们必须在XAML或XIB中重新创建iOS视图?

有什么东西真的是阻挡剂吗?

5 个答案:

答案 0 :(得分:17)

我会根据Giorgi的回答和一些实际的见解发表评论,并参考复制的要点:

这是我过去6个月收集的经验的简历:

Xamarin.Forms最适用于:

  • 需要少量平台特定功能的应用
    • 错误。使用DI,您可以使用任何您可能想要的设备功能。如果你对此有疑问,请查看GitHub上的XLabs。
  • 代码共享比自定义UI更重要的应用
    • 真的是胡说八道。您可以编写自己的渲染器,以您希望的方式表示每个平台的控件。我还为自定义控件(如SideDrawer)编写了更难的渲染器。在android中我完成了2天,iOS大约2周(android渲染器只是本机控件的包装器)
  • 开发人员熟悉XAML
    • 是的,还有任何喜欢方便用户界面开发的人。请注意,xaml有一个学习曲线(我从WPF开发时就已经知道了)。但是从我所看到的情况来看,它与android没有什么不同。

Xamarin.iOS& Xamarin.Android最适合:

  • 具有需要原生行为的互动的应用
    • 虽然以原生方式破解您的解决方案肯定会更快,但如果购买好的控件/知道一个好的本机实现并在C#中镜像它,则可以相当快地完成,因为C#中的API与本机API非常相似。
  • 使用许多特定于平台的API的应用
    • 不确定为什么Xamarin正在对表单进行反广告。到目前为止我没有遇到任何麻烦
  • 自定义用户界面比用户更重要的应用 代码共享
    • 可能是真的,但是保持UI功能内联也更难,你需要更多的人力。

有关表格的事项:

  • 目前表格似乎趋于稳定,我相信微软会尽力将其变成一个可靠,可靠的产品(有时候构建问题一直是个噩梦,但它已经变得更好了时间)

  • 与WPF XAML相比,Xamarin的XAML不太发达,尽管非常相似。然而,最近的nuget更新以令人印象深刻的速率提供了镜像功能。您期望和喜爱XAML的绝大多数功能都存在。

  • 如果您不进行研究(here),列表表现会很糟糕。性能增加了该地区的负荷。

  • 如果我必须再次做出选择,我仍然会选择表格。虽然有时会出现一些看似有缺陷/有缺陷的事情,但您通常可以通过某种方式找到一个干净的修复方式,同时花费大部分时间来实际开发应用程序。 (有时候你仍然会发现让你皱眉的事情,为什么没有实现某些东西,比如只有在微软购买xamarin之后才实施Margin属性)

  • 如果您最终需要嵌套列表,请务必查看嵌入式本机控件以获得最佳性能 - 这对于我正在使用的产品至关重要。请参阅this

答案 1 :(得分:7)

根据Xamarin.Forms main page

  

Xamarin.Forms 最适合:

Apps that require little platform-specific functionality
Apps where code sharing is more important than custom UI
Developers comfortable with XAML
     

Xamarin.iOS& Xamarin.Android 最适合:

Apps with interactions that require native behavior
Apps that use many platform-specific APIs
Apps where custom UI is more important than code sharing

答案 2 :(得分:4)

Giorgis答案是正确的,但是由于你在这里添加了一些限制,我的想法。

我会分析当前的应用程序。可共享的业务逻辑代码是多少?如何定制UI,它应该看起来更原生或更相似,以及将来会如何变化?如果您计划在UI中进行大量更改,并且平台应该看起来相似,那么切换到表单可能会更容易。

还要考虑您是否打算为Windows Phone开发?如果是,您可以为第三个平台节省大量时间。

毕竟有一件事我也会记住。在Xamarin.Forms开发并不意味着,你不能开发本机。它只是一个额外的框架。在最坏的情况下,你仍然可以做本地的一切。

答案 3 :(得分:3)

我个人使用Xamarin.iOS& Xamarin.Android带有MvvmCross,这样我就可以完全控制每个平台上的本机UI,同时最大化代码重用。

答案 4 :(得分:0)

来自Xamarin网站(谁知道比他们更好?):

Xamarin.Forms最适用于: 数据输入应用 原型和概念证明 需要很少平台特定功能的应用程序 代码共享比自定义UI更重要的应用

[https://developer.xamarin.com/guides/xamarin-forms/]

使用Xamarin.Forms 在运行时,每个页面及其控件都映射到特定于平台的本机用户界面元素。 使用Native Xamarin.Android和Xamarin.iOS应用程序利用特定于平台的硬件加速,并针对本机性能进行编译。使用在运行时解释代码的解决方案无法实现这一点。

  

“Xamarin.iOS - 构建原生iOS应用的最佳方式。”

     
      
  • 在App Store上发送本机应用程序包。我们的Ahead-of-Time(AOT)编译器将Xamarin.iOS应用程序直接编译为本机ARM程序集   代码,意味着您的应用程序是本机平台二进制文件。
  •   
  • 访问任何iOS API。我们将100%Apple的iOS SDK带到C#,增强了具有更强类型和.NET命名的Objective-C API   惯例让你感到宾至如归。
  •   
  • 从C#调用现有的Objective-C代码。在Xamarin应用程序中使用现有的Objective-C代码,框架和自定义控件   使用我们的自动绑定生成器。
  •   
  • 构建WatchKit应用程序。使用Xamarin Studio或Visual Studio构建新的Watch应用程序,在iOS Designer中编辑Watch用户界面,以及   debug在iOS模拟器中观看应用程序。
  •   
  • 与Apple保持同步。我们为iOS 5,iOS 6,iOS 7和iOS 8发布了当天支持,以便您的应用可以充分利用   最新的iOS功能尽快。
  •   

[https://www.xamarin.com/platform]

  

“Xamarin.Android - 构建原生Android应用的最佳方式。”

     
      
  • 发送原生Android软件包。 Xamarin.Android使用即时编译来进行应用程序的复杂运行时优化   性能,这意味着您的应用是原生Android APK。
  •   
  • 访问任何Android API,包括新的外形。我们将100%的Google Android API引入C#,通过异步支持增强Java API   和.NET命名约定让你感到宾至如归。
  •   
  • 从C#调用现有的Java代码。使用我们的Xamarin应用程序中的现有Java代码,框架和自定义控件   自动绑定生成器。
  •   
  • 构建Android Wear应用。通过访问Android Wear的100%API支持,创建能够运行的全功能应用程序   Android Wear设备。与Android保持同步。 Xamarin停留   与Google最新的API保持同步,因此始终可以   在您的应用中使用最新功能
  •   

[https://www.xamarin.com/platform]