关于c#:Xamarin跨平台应用与本机应用开发的想法是什么?

What is the idea of Xamarin's cross-platform app vs. native app development?

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

在安装了Xamarin的Visual Studio中,可以选择使用本机应用程序开发,如xamarin.ios、xamarin.droid和xamarin Windows应用程序。据一些更有经验的程序员告诉我,这三个应用程序/平台中的哪一个可以选择进行初始开发,这并不重要,因为最终可能——同样通过xamarin——部署到任何需要的平台上。

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

除非我在这里误解了什么,如果一个所谓的"跨平台应用程序"基本上可以和本地应用程序做同样的事情,那么作为第四选择有什么区别或想法呢?


在Xamarin中有两种方法:

  • 传统的方法是共享应用程序业务逻辑,并使用xamarin.android或xamarion.ios API专门为每个平台编写UI,以实现大约70%的代码共享。
  • xamarin.forms是一个位于特定API(xamarin.android和xamarin.ios)之上的库,用于帮助共享UI,并将大约90%的代码共享作为目标。
  • 使用Xamarin,您可以生成一个本地应用程序,并保留made the quote:

    Everything you can do in native with Java, Objective-c or swift you
    should be able to do with Xamarin.


    Xamarin不会神奇地制作应用程序,你为Android编写,在iOS上运行。至少不需要创建一个iOS应用程序和所有的用户界面等等。

    用XAMARIN创建原生应用程序,只是用C语言编写的,而不是Java或Objtovi-C或SWIFT。

    那么为什么选择Xamarin?它使您能够共享许多代码。根据代码的结构,有些应用程序可以实现90%以上的共享代码。但是,这在应用程序之间有很大的不同,并且无论您是否使用xamarin.forms,都会有所不同。

    您可能会提到问题中的xamarin.forms以及附带的项目类型。表单是运行在xamarin.android、xamarin.ios和uwp之上的UI框架。但是,请注意,这只是一个UI框架,它可能满足您的所有需求。

    然而,xamarin.forms并不能神奇地使Android应用程序在iOS上运行。使用xamarin.forms编写的用户界面,在iOS上运行和外观也很有潜力。但是,它仍然运行在iOS项目中,而不是Android项目中。对于您要瞄准的任何其他平台,都是如此。

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

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

    另一种类型是使用与PCL不同的共享项目类型创建xamarin.forms应用程序。怎样?一个共享项目应该作为一个光荣的文件链接项目关闭。呃,什么?当您构建项目时,在应用程序项目中复制和编译共享项目中的文件时,请看它。因此,您可以在该共享项目中编写特定于平台的代码。但是,它不会像PCL那样生成可以与朋友共享的程序集。

    这是很多沙玛林。形式说话。但是,xamarin.forms并不是创建xamarin应用程序的唯一方法。Xamarin提供了1:1的本地API暴露。这意味着,就像在iOS上一样,您可以创建故事板、视图控制器、使用uikit进行视图等。在xamarin.ios项目中,您可以做完全相同的事情。同样适用于xamarin.android,在那里你可以创建小部件、活动等,只需在xamarin.android项目中。这两者都产生了一个本地应用程序。然而,在这种情况下,用户界面不是抽象的,它给了你更多的能力来定制你的应用程序,而不必使用xamarin.forms。

    你应该选哪一个?这由你来决定。这两种方法都可以产生完全本地的应用程序和本地用户界面。它只是取决于你想要多少抽象。