Xamarin的跨平台应用与本机应用开发的想法是什么?

时间:2017-02-02 16:30:44

标签: c# android ios xamarin cross-platform

我目前正在阅读Xamarin,并偶然发现一个令我困惑的话题。我的意图是,开发一个iOS应用程序作为我的项目的目标。但是,由于其他情况,我现在只能在Android手机上进行测试,并且首先在iPhone的开发的最后部分进行测试。因此,该应用程序必须最初开发和测试Android,然后 - 通过Xamarin - 部署为iOS应用程序。

在安装了Xamarin的Visual Studio中,可以选择使用本机应用程序开发,例如Xamarin.iOS,Xamarin.Droid和Xamarin Windows应用程序。据一些经验丰富的程序员告诉我,这三个应用程序/平台中的哪一个会选择初始开发并不重要,因为它总是可以 - 再次通过Xamarin - 部署到最终需要的任何平台

现在项目菜单中还有第四个应用程序解决方案,名为"跨平台"这让我很困惑。据我了解,这是一个通用的应用程序选择,实际上与上一段中提到的本机应用程序的目的相同 - 在项目结束时需要部署到任何平台。

除非我在这里误解了一些东西,否则拥有一个所谓的跨平台应用程序的差异或想法究竟是什么呢?作为第四个选择,如果它基本上可以与本机应用程序相同吗?

2 个答案:

答案 0 :(得分:3)

在Xamarin中有两种方法:

  1. 传统方法,您可以共享应用程序业务逻辑,并使用Xamarin.Android或Xamarion.iOS API专门为每个平台编写UI,以达到约70%的代码共享。
  2. Xamarin.Forms是一个基于特定API(Xamarin.Android和Xamarin.iOS)的库,用于帮助共享UI以及约90%的代码共享。
  3. 使用Xamarin,您可以生成一个原生应用程序并保持引用:

      

    你可以用Java,Objective-c或swift来做的一切   应该能够使用Xamarin。

答案 1 :(得分:1)

Xamarin并没有神奇地制作应用,你为Android写的,在iOS上运行。至少没有创建一个iOS应用程序和所有的UI等。

使用Xamarin,您可以使用C#而不是Java或Objective-C或Swift编写本机应用程序。

那为什么选择Xamarin?它使您可以共享 lot 代码。根据您构建代码的方式,有些应用程序可以实现超过90%的共享代码或更多。但是,从应用程序到应用程序有很大不同,无论您是否使用Xamarin.Forms,都会有所不同。

您可能在您的问题中引用了Xamarin.Forms以及随附的项目类型。 Xamarin.Forms是在Xamarin.Android,Xamarin.iOS和UWP之上运行的UI框架。但请注意,这只是一个UI框架,它可以满足您的所有需求。

然而,Xamarin.Forms并没有神奇地让Android应用程序在iOS上运行。您使用Xamarin.Forms编写的UI具有巨大的运行潜力,并且在iOS上看起来也很好。但是,它仍然在iOS项目中运行,而不是Android项目。对于您要定位的任何其他平台,情况都是如此。

Xamarin.Forms是这些单独平台之上的抽象,可以帮助您编写一次UI并可能在任何地方运行,以及导航和服务定位器等其他功能。

您在Visual Studio的跨平台部分中引用的项目类型,只是创建Xamarin.Forms应用程序的不同方式。这可以在可移植类库(PCL)中,该库创建一个程序集,其目标是所选目标的.NET功能的公共子集。沿着PCL,每个支持的平台都会有一个应用程序项目。

另一种类型是使用共享项目类型创建Xamarin.Forms应用程序,该类型与PCL不同。怎么样?共享项目应该作为连接项目的美化文件。呃什么?查看它,因为在构建项目时,应用程序项目本身会复制和编译共享项目中的文件。因此,您可以在该共享项目中编写特定于平台的代码。但是,它确实没有像PCL一样生成可以与朋友分享的程序集。

这是很多Xamarin.Forms谈话。但是,Xamarin.Forms 不是是您创建Xamarin应用程序的唯一方法。 Xamarin提供1:1的原生API暴露。意思是,就像在iOS上一样,您可以创建故事板,ViewControllers,利用UIKit for Views等。您可以在Xamarin.iOS项目中完全相同。 Xamarin.Android也是如此,您可以在Xamarin.Android项目中创建小部件,活动等。这两个都产生本机App。但是,在这种情况下,UI不是抽象的,并且为您提供了更多的自定义应用程序的能力,而不必对抗Xamarin.Forms。

你应该选哪一个?这取决于你要弄明白。这两种方法都可以使用 native UI完全生成 native 应用程序。这取决于你是想要更多还是更少的抽象。