Maui的学习之路 -- 开篇
想了很久我决定发一个Maui
介绍做为开篇,虽然这是老生常谈的话题,但是不能没有这样的探讨(请容我水一篇)。
什么是.NET Maui
.NET Maui
是微软的一款基于.Net
多平台应用 UI (.NET MAUI)
的跨平台框架,使用 C#
和 XAML
创建本机移动和桌面应用, 使用.NET MAUI
,可以开发可从单个共享代码库在Android
、iOS
、macOS
和Windows
上运行的应用。.
.NET Maui
脱胎于Xamarin.Forms
,如果有Xamarin.Forms
的使用经验,那么Maui
的使用将变得非常得心应手。使用.NET MAUI
,可以使用单个项目创建多平台应用,但如有必要,可以添加特定于平台的源代码和资源。.NET MAUI
的主要目标是在单个代码库中实现尽可能多的应用逻辑和UI
布局。

.NET Maui
支持的平台
-
Android 5.0
或更高版本(API 21
) -
iOS 10
或更高版本(UIKit
) -
macOS 10.13
或更高版本(Mac Catalyst
UIKit
) -
Windows 11
和Windows 10
(1809
)或更高版本(WinUI3
WindowsAppSdk
) -
Tizen
,由三星支持(目前已经集成到工程模板中) -
Linux
,由社区支持
.NET Maui
的工作原理
.NET MAUI
将Android
、iOS
、macOS
和Windows API
统一到单个API
中,该API
允许一次写入一次运行的任何开发人员体验,同时提供对每个本机平台的各个方面的深入访问。
.NET 6
提供了一系列特定于平台的框架来创建应用:.NET for Android
、.NET for iOS
、.NET for macOS
以及 Windows UI 3
(WinUI 3
) 库。这些框架都有权访问同一个.NET 6
基类库(BCL
) 。此库将基础平台的详细信息从代码中抽象化。BCL
依赖于.NET
运行时,为代码提供执行环境。
对于Android
、iOS
和macOS
,环境由Mono
实现,这是.NET
运行时的实现。在Windows
,Win32
提供执行环境。
虽然BCL
使在不同平台上运行的应用能够共享常见的业务逻辑,但各种平台具有为应用定义用户界面的不同方式,并且它们提供了不同的模型,用于指定用户界面元素的通信和互操作方式。可以使用适用于Android
、iOS
、macOS
、WinUI 3
的.Net
单独为每个平台创建UI
,但此方法要求为每个单独的设备系列维护代码库。.NET MAUI
提供了一个框架,用于为移动和桌面应用构建UI
。
下图显示了.NET MAUI
应用的体系结构的高级视图:

在.NET MAUI
应用中,编写主要与.NET MAUI API
交互的代码,NET MAUI
直接使用本机平台API
。此外应用代码还可以根据需要直接使用平台 API
。
.NET MAUI
应用可以在Window PC
或Mac
上编写(目前需要使用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 11
、Windows 10
(1809
)或更高版本(Edge webview2
) -
Tizen
(未知) -
Linux
(未知)
-
.NET Maui
开发需要学习的技术知识:
-
基础: -
.NET
-
C#
-
Xaml
-
Maui
-
-
扩展: -
Winui3 api
以及Windows
平台Api
(Windows
) -
Android api
(Android
)(通常不需要,如果你需要调用一些硬件) -
UIKit
,iOS
平台api
(iOS
)(通常不需要,如果你需要调用一些硬件) -
UIKit
,Appkit
,MacOS api
(Mac
) -
Blazor
(不是必须)
-
.NET Maui的优缺点
-
优点: -
使用 C#
+.Net
开发,上手简单,升级容易,配合宇宙第一IDE工作效率不可同日而语 -
微软技术基本都存在共性(你可以轻松转战 WPF
) -
大厂保证 -
在不同的平台使用平台自身控件,保证原生性能 -
配合 Blazor
可以实现跟网页端一致体验
-
-
缺点: -
不支持 win7
,甚至还挑win10
的版本 -
目前虽然正式发布但还是不够稳定 -
因为是 C#
所以也许可能不如java
系或者前端那么容易找到满足的工作(大厂一般都是java
) -
微软喜欢砍砍砍 -
虽然保证原生,但是这也就意味着你需要对不同的平台做相关适配(非自绘) -
虽然保证原生,这也意味着你需要学习平台相关知识(控件部分行为也有不同)(当然这是所有跨平台应用都需要学习的)
-
同类跨平台开发框架:
-
QT
(使用C++
,我个人认为是目前真正意义上的跨平台,甚至还支持嵌入式)(自绘) -
Flutter
(谷歌的跨平台框架,使用Dart
语言)(自绘) -
Uno platform
(C#
实现方式类似Maui
) -
Avalonia
(C#
类WPF
)(自绘) -
CPF
(C#
国产跨平台UI
开发框架,支持龙芯)(自绘) -
Electron
(网页技术栈方向)