Xamarin 简介 #

什么是跨平台移动开发? #

跨平台移动开发是指使用一套代码库,同时为多个移动平台(如 Android、iOS、Windows)构建应用程序的开发方式。这种方式可以显著减少开发时间和成本。

text
┌─────────────────────────────────────────────────────────────┐
│                    传统开发模式                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   ┌─────────────┐  ┌─────────────┐  ┌─────────────┐        │
│   │  Android    │  │    iOS      │  │  Windows    │        │
│   │   Java      │  │  Swift/ObjC │  │    C#       │        │
│   │  代码库 A   │  │  代码库 B   │  │  代码库 C   │        │
│   └─────────────┘  └─────────────┘  └─────────────┘        │
│                                                             │
│   问题:                                                     │
│   ❌ 三套代码,维护成本高                                    │
│   ❌ 需要三个开发团队                                       │
│   ❌ 功能迭代慢                                             │
│   ❌ Bug 修复需要三次                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────┐
│                    跨平台开发模式                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│                  ┌─────────────────┐                        │
│                  │   共享代码库     │                        │
│                  │   C# / .NET     │                        │
│                  └────────┬────────┘                        │
│                           │                                 │
│           ┌───────────────┼───────────────┐                │
│           │               │               │                 │
│           ▼               ▼               ▼                 │
│   ┌─────────────┐ ┌─────────────┐ ┌─────────────┐          │
│   │  Android    │ │    iOS      │ │  Windows    │          │
│   └─────────────┘ └─────────────┘ └─────────────┘          │
│                                                             │
│   优势:                                                     │
│   ✅ 一套代码,多平台运行                                    │
│   ✅ 一个团队即可开发                                       │
│   ✅ 快速迭代                                               │
│   ✅ Bug 修复一次即可                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

什么是 Xamarin? #

Xamarin 是一个开源的跨平台移动应用开发框架,允许开发者使用 C# 和 .NET 构建原生 Android、iOS、macOS、tvOS、watchOS 和 Windows 应用程序。

核心定位 #

text
┌─────────────────────────────────────────────────────────────┐
│                         Xamarin                              │
├─────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  原生性能    │  │  代码共享    │  │  C# / .NET  │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │  原生 UI     │  │  完整 API    │  │  强类型     │         │
│  └─────────────┘  └─────────────┘  └─────────────┘         │
└─────────────────────────────────────────────────────────────┘

Xamarin 的组成 #

text
┌─────────────────────────────────────────────────────────────┐
│                    Xamarin 技术栈                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                  Xamarin.Forms                       │   │
│  │         跨平台 UI 框架(共享 UI 代码)                │   │
│  └─────────────────────────────────────────────────────┘   │
│                           │                                 │
│  ┌────────────────────────┼────────────────────────────┐   │
│  │                        │                            │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐ │   │
│  │  │ Xamarin.    │  │ Xamarin.    │  │ Xamarin.    │ │   │
│  │  │ Android     │  │ iOS         │  │ Mac         │ │   │
│  │  │             │  │             │  │             │ │   │
│  │  │ Android SDK │  │ iOS SDK     │  │ macOS SDK   │ │   │
│  │  │ 绑定        │  │ 绑定        │  │ 绑定        │ │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘ │   │
│  │                                                     │   │
│  │              平台特定代码层                          │   │
│  └─────────────────────────────────────────────────────┘   │
│                           │                                 │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                   .NET / C#                          │   │
│  │              共享业务逻辑层                          │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Xamarin 的历史 #

发展历程 #

text
2011年 ─── Xamarin 公司成立
    │
    │      Miguel de Icaza 创立
    │      基于 Mono 项目
    │      提供 iOS/Android 支持
    │
2012年 ─── Xamarin.Android 发布
    │
    │      Mono for Android 更名
    │      支持 Android 原生开发
    │
2013年 ─── Xamarin.iOS 发布
    │
    │      MonoTouch 更名
    │      支持 iOS 原生开发
    │
2014年 ─── Xamarin.Forms 发布
    │
    │      跨平台 UI 框架
    │      一套 UI 代码多平台运行
    │
2016年 ─── 微软收购 Xamarin
    │
    │      开源免费
    │      集成到 Visual Studio
    │
2017年 ─── Xamarin.Forms 3.0
    │
    │      .NET Standard 支持
    │      性能优化
    │
2020年 ─── Xamarin.Forms 5.0
    │
    │      新控件和特性
    │      视觉状态管理器
    │
2021年 ─── .NET MAUI 发布
    │
    │      Xamarin 的继任者
    │      统一 .NET 平台
    │
至今   ─── 持续支持
    │
    │      Xamarin 继续维护
    │      迁移到 MAUI

里程碑版本 #

版本 时间 重要特性
1.0 2011 初始发布,Mono 移动版
2.0 2013 Xamarin Studio IDE
3.0 2014 Xamarin.Forms 发布
4.0 2016 微软收购,免费开源
5.0 2020 最新稳定版

为什么选择 Xamarin? #

原生开发的问题 #

在使用 Xamarin 之前,移动开发面临以下问题:

csharp
// Android (Java/Kotlin)
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(v -> {
            // 处理点击
        });
    }
}
swift
// iOS (Swift)
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        let button = UIButton(type: .system)
        button.addTarget(self, action: #selector(handleTap), for: .touchUpInside)
    }
    
    @objc func handleTap() {
        // 处理点击
    }
}

Xamarin 的解决方案 #

csharp
// Xamarin.Forms (C#) - 一套代码,多平台运行
public class MainPage : ContentPage
{
    public MainPage()
    {
        var button = new Button
        {
            Text = "Click Me"
        };
        button.Clicked += (s, e) =>
        {
            // 处理点击 - 所有平台相同逻辑
        };
        
        Content = new StackLayout
        {
            Children = { button }
        };
    }
}

Xamarin 的核心特点 #

1. 原生性能 #

text
┌─────────────────────────────────────────────────────────────┐
│                    Xamarin 原生性能                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Xamarin 应用编译为原生代码:                                 │
│                                                             │
│  Android:                                                   │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  C# → IL → Native Code (AOT)                        │   │
│  │  直接调用 Android API                               │   │
│  │  原生 UI 控件                                       │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  iOS:                                                       │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  C# → Native Code (AOT)                             │   │
│  │  直接调用 iOS API                                   │   │
│  │  原生 UI 控件                                       │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
│  性能接近原生应用                                            │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2. 代码共享 #

text
┌─────────────────────────────────────────────────────────────┐
│                    代码共享率                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  典型 Xamarin 项目代码分布:                                  │
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │                                                     │   │
│  │  ████████████████████████████████████  90%          │   │
│  │           共享代码 (C# / .NET)                       │   │
│  │  - 业务逻辑                                         │   │
│  │  - 数据访问                                         │   │
│  │  - UI 代码 (Xamarin.Forms)                          │   │
│  │                                                     │   │
│  │  ████  10%                                          │   │
│  │  平台特定代码                                       │   │
│  │  - 平台特性调用                                     │   │
│  │  - 自定义渲染器                                     │   │
│  │                                                     │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

3. 完整的 .NET 生态系统 #

csharp
// 使用熟悉的 .NET 库
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;

public class DataService
{
    private readonly HttpClient _client = new HttpClient();
    
    public async Task<List<Item>> GetItemsAsync()
    {
        var response = await _client.GetStringAsync("https://api.example.com/items");
        return JsonConvert.DeserializeObject<List<Item>>(response);
    }
}

4. 强大的工具支持 #

text
┌─────────────────────────────────────────────────────────────┐
│                    开发工具                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Visual Studio (Windows)                                    │
│  ├── 完整 IDE 体验                                          │
│  ├── 设计器支持                                             │
│  ├── 调试工具                                               │
│  └── 性能分析器                                             │
│                                                             │
│  Visual Studio for Mac                                      │
│  ├── macOS 开发环境                                         │
│  ├── iOS 模拟器集成                                         │
│  └── Xamarin 设计器                                         │
│                                                             │
│  Visual Studio Code                                         │
│  ├── 轻量级编辑器                                           │
│  ├── C# 扩展支持                                            │
│  └── 热重载支持                                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

5. 原生 API 访问 #

csharp
// Android 平台特定代码
[assembly: Dependency(typeof(AndroidFeature))]
public class AndroidFeature : IPlatformFeature
{
    public void DoSomething()
    {
        // 直接访问 Android API
        var vibrator = (Vibrator)Android.App.Application.Context
            .GetSystemService(Context.VibratorService);
        vibrator.Vibrate(100);
    }
}
csharp
// iOS 平台特定代码
[assembly: Dependency(typeof(iOSFeature))]
public class iOSFeature : IPlatformFeature
{
    public void DoSomething()
    {
        // 直接访问 iOS API
        var impact = new UIImpactFeedbackGenerator(UIImpactFeedbackStyle.Medium);
        impact.ImpactOccurred();
    }
}

Xamarin vs 其他跨平台方案 #

Xamarin vs Flutter #

特性 Xamarin Flutter
语言 C# Dart
渲染 原生控件 自绘引擎
性能
学习曲线 中等 中等
生态系统 .NET Dart/Flutter
热重载
微软支持

Xamarin vs React Native #

特性 Xamarin React Native
语言 C# JavaScript
渲染 原生控件 原生控件
性能 中高
类型安全 强类型 弱类型
学习曲线 中等 中等
热重载
调试体验 一般

Xamarin vs Ionic #

特性 Xamarin Ionic
语言 C# JavaScript
渲染 原生控件 WebView
性能
学习曲线 中等
原生体验 一般
适合场景 企业应用 简单应用

Xamarin 的应用场景 #

1. 企业级应用 #

csharp
// 企业应用特点
public class EnterpriseApp
{
    // 复杂的业务逻辑
    // 数据验证
    // 离线支持
    // 安全性要求
    // 与后端系统集成
}

2. B2B 应用 #

csharp
// B2B 应用特点
public class B2BApp
{
    // 多平台支持
    // 数据同步
    // 工作流集成
    // 报表生成
    // 权限管理
}

3. 消费者应用 #

csharp
// 消费者应用特点
public class ConsumerApp
{
    // 精美 UI
    // 社交分享
    // 推送通知
    // 支付集成
    // 地图定位
}

4. 原型开发 #

csharp
// 快速原型
public class Prototype
{
    // 快速开发
    // 低成本验证
    // 迭代优化
    // 跨平台演示
}

Xamarin.Forms vs Xamarin.Native #

Xamarin.Forms #

text
┌─────────────────────────────────────────────────────────────┐
│                    Xamarin.Forms                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  特点:                                                      │
│  - 一套 UI 代码,多平台运行                                  │
│  - 抽象层封装原生控件                                        │
│  - 快速开发                                                 │
│  - 代码共享率高                                             │
│                                                             │
│  适合:                                                      │
│  - 企业应用                                                 │
│  - 快速原型                                                 │
│  - 表单类应用                                               │
│  - 跨平台一致性要求高                                        │
│                                                             │
│  UI 代码共享率:~95%                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Xamarin.Native #

text
┌─────────────────────────────────────────────────────────────┐
│                    Xamarin.Native                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  特点:                                                      │
│  - 每个平台独立 UI                                          │
│  - 直接使用原生控件                                          │
│  - 完全控制外观                                             │
│  - 性能最优                                                 │
│                                                             │
│  适合:                                                      │
│  - 高度定制 UI                                              │
│  - 复杂交互                                                 │
│  - 游戏类应用                                               │
│  - 平台特性要求高                                            │
│                                                             │
│  UI 代码共享率:~60%                                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Xamarin 的优势与局限 #

优势 #

text
✅ 原生性能
   - 编译为原生代码
   - 直接调用原生 API
   - 原生 UI 控件

✅ 代码共享
   - 业务逻辑共享
   - UI 代码共享 (Forms)
   - 数据层共享

✅ .NET 生态系统
   - 丰富的 NuGet 包
   - 成熟的框架
   - 强大的工具

✅ 强类型语言
   - C# 类型安全
   - 编译时检查
   - 重构友好

✅ 微软支持
   - 持续更新
   - 完善文档
   - 社区活跃

局限性 #

text
⚠️ 应用体积
   - 包含 .NET 运行时
   - 初始安装包较大
   - 可通过链接器优化

⚠️ 学习曲线
   - 需要学习 C#
   - 需要了解各平台特性
   - XAML 学习成本

⚠️ UI 复杂度
   - 高度定制 UI 困难
   - 平台差异处理
   - 自定义渲染器复杂

⚠️ 第三方库
   - 部分 iOS/Android 库需要绑定
   - 绑定过程可能复杂
   - 社区库相对较少

Xamarin 与 .NET MAUI #

MAUI 是什么? #

.NET MAUI (Multi-platform App UI) 是 Xamarin 的进化版本,提供了统一的跨平台开发体验。

text
┌─────────────────────────────────────────────────────────────┐
│                    演进路线                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Xamarin.Android ──┐                                        │
│                    │                                        │
│  Xamarin.iOS ──────┼──► .NET MAUI                           │
│                    │                                        │
│  Xamarin.Forms ────┘                                        │
│                                                             │
│  改进:                                                      │
│  - 统一项目结构                                              │
│  - 更好的性能                                               │
│  - 现代化 API                                               │
│  - .NET 6+ 支持                                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

迁移建议 #

text
┌─────────────────────────────────────────────────────────────┐
│                    迁移策略                                  │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  新项目:                                                    │
│  ✅ 直接使用 .NET MAUI                                      │
│                                                             │
│  现有 Xamarin 项目:                                         │
│  1. 评估迁移成本                                            │
│  2. 使用迁移工具                                            │
│  3. 逐步迁移                                                │
│  4. Xamarin 继续支持                                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

学习建议 #

  1. 掌握 C# 基础:C# 是 Xamarin 的核心语言
  2. 理解 .NET 概念:熟悉 .NET 生态系统
  3. 学习 XAML:UI 声明式开发
  4. 理解 MVVM:掌握架构模式
  5. 实践项目:通过实际项目巩固知识

下一步 #

现在你已经了解了 Xamarin 是什么,接下来学习 安装与配置,开始你的跨平台移动开发之旅!

最后更新:2026-03-29