Xamarin — 什么是它,平台及C#开发

作者: IT Sectr 发布日期: 2026-05-01 阅读时间: 9 分钟

Xamarin — 是微软于2011年发布的用于在C#语言中创建移动应用程序的平台。根据 Microsoft Xamarin Documentation, 2024,Xamarin允许使用C#和.NET的通用代码库为iOS、Android和Windows编写应用程序,并使用Mono Runtime编译为本机代码。自2024年起,Xamarin.Forms已被.NET MAUI取代。

要点

  • Xamarin — 微软用于在iOS、Android和Windows上进行C#开发的移动平台
  • 两种方法:Xamarin.Forms(通过XAML共享UI)和Xamarin.Native(单独的本机屏幕)
  • Mono Runtime将C#编译为适用于iOS和Android的本机ARM代码
  • XAML — 用于构建用户界面的声明性标记语言
  • .NET MAUI — Xamarin.Forms的继任者,由微软于2022年发布

什么是Xamarin

Xamarin — 是一个基于.NET和Mono的平台,允许使用C#创建跨平台移动应用程序。Xamarin公司成立于2011年,于2016年被微软以4亿美元收购。收购后,Xamarin成为Visual Studio和Azure生态系统的一部分。

在被微软收购之前,Xamarin 是一个拥有企业许可证的商业产品。微软将其作为Visual Studio Community的一部分免费提供,并开放了Mono Runtime和SDK绑定的源代码。这导致其受欢迎程度上升:根据SlashData的报告,到2020年,Xamarin被用于15%的跨平台项目中。

Xamarin 的主要理念 — 将代码分为三层:通用业务逻辑(C#、.NET Standard)、平台项目(iOS、Android)和通过Xamarin.Forms的可选共享UI。这种方法允许在保持对每个平台API的本机访问的同时重用高达75%的代码。

Xamarin的历史和发展

Xamarin 1.0 的第一个版本于2012年发布,仅支持iOS。2013年增加了对Android的支持。Xamarin.Forms — 声明性UI框架 — 于2014年在Evolve大会上推出。Xamarin 4.0(2016)增加了对watchOS和tvOS的支持。Xamarin 5.0(2019)引入了CSS样式和Material Design主题。

Xamarin.Forms 5.0 的最后一个主要版本于2021年发布。微软宣布Xamarin将进入支持模式(生命周期结束 — 2024年5月1日),并建议迁移到属于.NET 6+一部分的.NET MAUI(多平台应用程序UI)。Xamarin.Forms 5.0不再获得新功能,只获得关键安全修复。

Xamarin.Forms vs Xamarin.Native

Xamarin.Forms — 是一个通过统一元素集抽象接口的UI框架。XAML标记(ContentPage、StackLayout、Label、Button)通过渲染器映射到每个平台的本机控件。Label在iOS上转换为UILabel,在Android上转换为TextView。这种方法提供高达95%的共享UI代码。

Xamarin.Native(也包括Xamarin.iOS和Xamarin.Android)— 是一种没有共享UI的方法。开发人员使用一个C#后端为iOS(Interface Builder或Storyboard)和Android(AXML)创建单独的屏幕。这样可以完全控制每个平台的外观,但会将重复的UI代码量增加到50–60%。

根据 Microsoft Developer Survey 2023,70%的Xamarin项目使用Xamarin.Forms,20%使用带有共享服务的Xamarin.Native,10%使用带有用于平台优化的自定义渲染器的混合方法。

Xamarin架构

Xamarin架构 由两层组成。底层 — Mono Runtime,在平台上执行C#中间语言(IL)。上层 — 用于iOS的托管可调用包装器(MCW)和用于Android的Android绑定,它们提供从托管C#代码对本机API的访问。

Mono Runtime和平台绑定

Mono — 是.NET框架的开源实现。在Xamarin中,Mono作为公共语言运行时(CLR)执行环境工作,加载C#程序集并将其编译为机器码。在iOS上,Mono进行提前编译(AOT)— 编译为ARM64机器码,因为Apple禁止在用户应用程序中进行JIT编译。在Android上,Mono使用带有AOT分析的JIT编译。

iOS绑定(Xamarin.iOS)— 是Objective-C运行时之上的C#包装器。每个UIKit类(UIView、UIViewController)由Xamarin.iOS.dll程序集中的托管类表示。Objective-C选择器通过MessageUI机制调用。在Android上,Xamarin.Android使用Android可调用包装器(ACW)— C#与Java/Kotlin之间的JNI桥接。Kotlin库通过Android绑定库进行包装。

Xamarin中的XAML和C#

XAML(可扩展应用程序标记语言)— 用于描述UI的声明性语言。在Xamarin.Forms中,XAML定义屏幕结构:页面(ContentPage)、容器(StackLayout、Grid、FlexLayout)和元素(Label、Entry、Button、ListView)。C#中的后端代码处理事件(Clicked、PropertyChanged)并管理数据绑定(Binding、Data Binding)。

MVVM模式 — Xamarin.Forms的推荐架构。模型包含数据,视图模型实现INotifyPropertyChanged和命令(ICommand),视图(XAML)通过BindingContext连接。通过RelayCommand或Prism DelegateCommand实现ICommand可确保在没有UI依赖的情况下测试视图模型。Prism.Forms库提供NavigationService、DialogService和模块化。

Xamarin.Forms应用程序示例

csharp
using Xamarin.Forms;

namespace XamarinApp
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
            
            var label = new Label
            {
                Text = "Hello, Xamarin!",
                FontSize = 24,
                VerticalOptions = LayoutOptions.Center,
                HorizontalOptions = LayoutOptions.Center
            };
            
            Content = new StackLayout
            {
                Children = { label }
            };
        }
    }
}

Xamarin的优缺点

单一C#语言 — Xamarin的主要优势。C#和.NET开发人员无需学习Swift、Kotlin或Objective-C即可创建移动应用程序。业务逻辑、网络工作、数据库(通过ORM的SQLite)、加密和日志记录一次性编写并在所有平台上重用。这简化了代码的维护和测试。

对本机API的访问 — Xamarin通过绑定提供对iOS(Cocoa Touch)和Android(Android SDK)API的100%访问。当新的iOS或Android版本发布时,微软在24–48小时内发布更新的绑定。对于缺失的绑定(自定义Objective-C或Kotlin库),手动创建Android绑定库或iOS绑定库。

与微软生态系统集成 — Xamarin支持Visual Studio、Azure DevOps、App Center(CI/CD、测试、监控)和企业移动性+安全性(Intune、ADAL、MSAL)。App Center分析和崩溃从实时应用程序收集数据。Visual Studio App Center自动化构建、设备测试和应用程序商店发布。

缺点 — Xamarin的缺点包括应用程序大小 — 带有空白屏幕的Xamarin.Forms APK重25–35 MB,而本机Android应用程序为5–8 MB。编译时间也更高:中等规模的项目构建需要2–5分钟,而本机Android Studio需要30–60秒。Mono Runtime向最终二进制文件添加15–20 MB。

第二个缺点 — 新API的延迟。新的iOS/Android功能在本机开发中立即出现,但在Xamarin中 — 在绑定发布后1–2个月。iOS 17 SDK(2023)在发布后3周内得到Xamarin的完全支持。对于紧急项目,这可能是关键的。.NET MAUI通过与.NET 8的直接集成解决了这个问题。

标准Xamarin.NET MAUI
平台iOS、Android、WindowsiOS、Android、Windows、macOS、Tizen
基础框架Mono + .NET Standard.NET 6+(统一BCL)
UI框架Xamarin.Forms.NET MAUI(继任者)
支持模式自2024年5月1日起生命周期结束微软积极开发
热重载有限XAML热重载 + C#重载

迁移到.NET MAUI

.NET MAUI(多平台应用程序UI)— 是Xamarin.Forms的演进,由微软于2022年与.NET 6一起发布。MAUI将iOS、Android、Windows和macOS整合到一个项目中,无需为每个平台单独创建项目。与Xamarin.Forms不同,MAUI使用.NET 6+ BCL,而不是Mono和.NET Standard。

微软提供 迁移工具 — 用于Visual Studio的.NET升级助手。它分析Xamarin.Forms项目,替换命名空间(Xamarin.Forms.* -> Microsoft.Maui.*),更新.csproj文件(SDK风格格式)并将Android和iOS设置迁移到单一配置。迁移后,项目可以使用.NET 8的所有新功能:本机AOT、用于安全性的CodeQL和改进的构建性能。

关键变化 — 单一项目。如果Xamarin.Forms需要3个单独的项目(iOS、Android、.NET Standard),.NET MAUI使用一个带有Platforms/iOS、Platforms/Android、Platforms/Windows和Platforms/MacCatalyst文件夹的项目。每个平台从共享代码编译,带有平台条件指令(#if ANDROID、#if IOS)。

对于 现有代码库,.NET MAUI提供与Xamarin.Forms 90%的向后兼容性。API兼容性涵盖ContentView、ContentPage、Shell、NavigationPage、DependencyService和MessagingCenter。主要更改影响到Device.StartTimer(替换为IDispatcher)、Platform API(移至Microsoft.Maui.ApplicationModel)和过时的渲染器(替换为Handlers)。

迁移 过程包括五个步骤。第一 — 将Xamarin.Forms更新到最新的5.0版本。第二 — 将.NET Standard 2.0替换为.NET 6或8。第三 — 运行升级助手以自动转换项目。第四 — 在Platforms文件夹中修复平台代码。第五 — 测试,特别是自定义渲染器和平台服务。

常见问题

什么是Xamarin?

Xamarin — 是微软用于在iOS、Android和Windows上进行C#开发的移动平台。它使用Mono Runtime编译共享代码,并提供两种方法:Xamarin.Forms(通过XAML统一UI)和Xamarin.Native(平台的本机屏幕)。自2024年起,Xamarin处于支持模式。

Xamarin与Flutter有何不同?

Xamarin 使用C#和.NET,通过本机控件(UIKit、View)渲染,但通过绑定。Flutter使用Dart和自己的渲染引擎(Impeller),不依赖本机UI组件。Flutter在所有平台上提供统一外观,而Xamarin提供每个操作系统的本机外观。Flutter由谷歌支持,拥有46%的市场份额,而Xamarin为15%。

2024年是否值得在Xamarin上启动新项目?

不建议。微软已于2024年5月1日 停止了对Xamarin的支持。所有新项目应在.NET MAUI上启动 — 它的继任者,内置于.NET 8中,并将随.NET平台一起获得更新。对于现有的Xamarin.Forms项目,建议在12–18个月内进行迁移。

Xamarin.Forms比本机应用程序慢吗?

对于普通应用程序来说,差异 很小。Xamarin.Forms由于托管包装器-本机包装器而增加了5–10%的渲染开销。问题出现在繁重的列表(ListView与RecyclerView)和动画(使用Xamarin.Forms工具而没有平台API)中。建议使用CollectionView(已替换ListView)和本机动画。

可以在Xamarin中使用Kotlin库吗?

可以,通过 Android绑定库。这种.NET项目类型将AAR或JAR存档包装到C#绑定中,并自动生成类和方法。对于Kotlin库,需要额外的协程和密封类处理程序,这些程序通过绑定库中的Metadata.xml进行配置。

总结

  • Xamarin — 微软基于Mono Runtime的C#移动开发平台
  • Xamarin.Forms 通过带有本机渲染器的XAML标记提供90–95%的共享代码
  • Xamarin.Native 通过单独的屏幕提供对每个平台UI的完全控制
  • 缺点:APK大小25–35 MB,编译时间2–5分钟,新API延迟
  • .NET MAUI — Xamarin.Forms的继任者,具有单一项目、.NET 8和对5个平台的支持
  • 通过升级助手在1–2天内完成中等项目的 迁移 到.NET MAUI
  • 对于 新项目,请使用.NET MAUI — Xamarin于2024年5月达到生命周期结束

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读