Maui的学习之路 -- 开篇

Maui的学习之路 -- 开篇

想了很久我决定发一个Maui介绍做为开篇,虽然这是老生常谈的话题,但是不能没有这样的探讨(请容我水一篇)。

什么是.NET Maui

.NET Maui是微软的一款基于.Net多平台应用 UI (.NET MAUI)的跨平台框架,使用 C# 和 XAML 创建本机移动和桌面应用, 使用.NET MAUI,可以开发可从单个共享代码库在AndroidiOSmacOSWindows上运行的应用。.

.NET Maui脱胎于Xamarin.Forms,如果有Xamarin.Forms的使用经验,那么Maui的使用将变得非常得心应手。使用.NET MAUI,可以使用单个项目创建多平台应用,但如有必要,可以添加特定于平台的源代码和资源。.NET MAUI 的主要目标是在单个代码库中实现尽可能多的应用逻辑和UI布局。

Maui的学习之路 -- 开篇

.NET Maui支持的平台

  • Android 5.0或更高版本(API 21)
  • iOS 10或更高版本(UIKit)
  • macOS 10.13或更高版本(Mac Catalyst UIKit)
  • Windows 11Windows 10(1809)或更高版本(WinUI3 WindowsAppSdk)
  • Tizen,由三星支持(目前已经集成到工程模板中)
  • Linux,由社区支持

.NET Maui的工作原理

.NET MAUIAndroidiOSmacOSWindows API统一到单个API中,该API允许一次写入一次运行的任何开发人员体验,同时提供对每个本机平台的各个方面的深入访问。

.NET 6 提供了一系列特定于平台的框架来创建应用:.NET for Android.NET for iOS.NET for macOS以及 Windows UI 3 (WinUI 3) 库。这些框架都有权访问同一个.NET 6 基类库(BCL) 。此库将基础平台的详细信息从代码中抽象化。BCL 依赖于.NET 运行时,为代码提供执行环境。

对于AndroidiOSmacOS,环境由Mono实现,这是.NET 运行时的实现。在WindowsWin32 提供执行环境。

虽然BCL使在不同平台上运行的应用能够共享常见的业务逻辑,但各种平台具有为应用定义用户界面的不同方式,并且它们提供了不同的模型,用于指定用户界面元素的通信和互操作方式。可以使用适用于AndroidiOSmacOSWinUI 3.Net单独为每个平台创建UI,但此方法要求为每个单独的设备系列维护代码库。.NET MAUI提供了一个框架,用于为移动和桌面应用构建UI

下图显示了.NET MAUI应用的体系结构的高级视图:

Maui的学习之路 -- 开篇

.NET MAUI应用中,编写主要与.NET MAUI API交互的代码,NET MAUI直接使用本机平台API。此外应用代码还可以根据需要直接使用平台 API

.NET MAUI应用可以在Window PCMac上编写(目前需要使用vs2022 preview),并编译为本机应用包:

  • Android使用.NET MAUI编译的应用从C#编译到中间语言(IL),然后在应用启动时(JIT)编译为本机程序集。
  • iOS使用.NET MAUI编译的应用完全原生编译(从C#编译为本机ARM程序集代码的AOT) 。
  • macOS使用.NET MAUI编译的应用使用Mac Catalyst,这是Apple提供的一种解决方案,它可将使用UIKit生成的iOS应用引入桌面,并根据需要使用其他AppKit和平台API对其进行扩充。
  • Windows使用.NET MAUI生成的应用使用Windows UI 3(WinUI 3)库来创建面向Windows桌面的本机应用。

.NET Maui的其他应用方式

  • 虽然.NET Maui已经提供了对各个平台原生的控件的封装,但是你仍然可以使用Maui提供的自绘引擎绘制符合自己需求的控件(Microsoft.Maui.Graphics
  • 你也可以创建.NET MAUI Blazor应用,来达到和网页一样的使用体验,.NET MAUI Blazor应用还需要更新的平台特定的WebView控件,目前支持平台如下:
    • Android 7.0(API 24)或更高版本(Chrome
    • iOS 14或更高版本(Safari
    • Mac Catalyst macOS 11或更高版本(Safari
    • indows 11Windows 10(1809)或更高版本(Edge webview2
    • Tizen(未知)
    • Linux(未知)

.NET Maui开发需要学习的技术知识:

  • 基础:
    • .NET
    • C#
    • Xaml
    • Maui
  • 扩展:
    • Winui3 api以及Windows平台ApiWindows
    • Android apiAndroid)(通常不需要,如果你需要调用一些硬件)
    • UIKitiOS平台apiiOS)(通常不需要,如果你需要调用一些硬件)
    • UIKitAppkitMacOS apiMac
    • Blazor(不是必须)

.NET Maui的优缺点

  • 优点:
    • 使用C# + .Net开发,上手简单,升级容易,配合宇宙第一IDE工作效率不可同日而语
    • 微软技术基本都存在共性(你可以轻松转战WPF
    • 大厂保证
    • 在不同的平台使用平台自身控件,保证原生性能
    • 配合Blazor可以实现跟网页端一致体验
  • 缺点:
    • 不支持win7,甚至还挑win10的版本
    • 目前虽然正式发布但还是不够稳定
    • 因为是C#所以也许可能不如java系或者前端那么容易找到满足的工作(大厂一般都是java
    • 微软喜欢砍砍砍
    • 虽然保证原生,但是这也就意味着你需要对不同的平台做相关适配(非自绘)
    • 虽然保证原生,这也意味着你需要学习平台相关知识(控件部分行为也有不同)(当然这是所有跨平台应用都需要学习的)

同类跨平台开发框架:

  • QT(使用C++,我个人认为是目前真正意义上的跨平台,甚至还支持嵌入式)(自绘)
  • Flutter(谷歌的跨平台框架,使用Dart语言)(自绘)
  • Uno platformC# 实现方式类似Maui
  • AvaloniaC# 类WPF)(自绘)
  • CPFC# 国产跨平台UI开发框架,支持龙芯)(自绘)
  • Electron (网页技术栈方向)