一、 引言

打算开发一款简单的Android的App,且已经用Android Studio那套环境做了一些准备工作了,但经过一段时间的学习了解,决定改用.NET来开发(一开始想用Xamarin,后进入Xamarin官网,发现推荐我使用MAUI(微软给新产品打广告嘛))。

简单谈谈,为什么最后还是选择用.NET MAUI:

  • 公司产品主要是.NET下开发的,自己也用过一段时间的WPF,相比于安卓,对.NET平台更熟悉一点。AS是用Java或kotlin开发App,.NET MAUI是C#开发App,一定程度上节省了语言成本。
  • .NET MAUI(这边或许不应该并列)相对来说是新技术产品,边学边做有利于熟悉.NET平台的新特性和丰富.NET技术栈。
  • .NET MAUI不仅可以开发Android App,它是多平台的,方便以后开发其他平台的(iOS、macOS等)程序。

不过,这些是我初步了解下来,选择它的理由。最后它是推荐还是鸡肋,还得学下去看。

下面先来了解一下.NET MAUI整体框架,然后再针对其Android部分进行学习。


二、什么是.NET MAUI?

.NET Multi-platform App UI(简称.NET MAUI)是一个跨平台框架,它用C#和XAML来创建原生的移动端和桌面端应用程序

使用.NET MAUI,你只需维护一套共享的代码库就能开发运行在Android、iOS、macOS和Windows上的应用程序。
在这里插入图片描述
.NET MAUI是开源的,它是Xamarin.Forms的进化版,从移动端扩展到了桌面场景,并且对UI控件进行了重建,以提高性能和可拓展性。如果你以前用过Xamarin.Forms来构建跨平台UI,你会注意到它与.NET MAUI有许多相似之处。当然,它们之间也有一些区别。使用.NET MAUI,你可以使用单个项目来创建多平台的应用程序。不过,如果有必要的话,你也可以添加特定平台的源代码和资源。.NET MAUI的一个关键目标是让你能够在一个代码库中实现尽可能多的应用程序逻辑和UI布局。

1. .NET MAUI为谁服务?

.NET MAUI为想要做以下事情的开发者而生:

  • 在VS的一套共享代码库中,用XAML和C#写跨平台程序。
  • 跨平台共享UI布局与设计。
  • 跨平台共享代码、测试和业务逻辑。

可以看出.NET MAUI两大特点是跨平台和使用C#&XAML开发。

2. .NET MAUI是怎样工作的?

.NET MAUI将Android、iOS、macOS和Windows 的API统一成一个API,带来了一次编写、随处运行的开发体验,同时还提供对每个原生平台的深度访问。

.NET6提供了一系列特定于平台的框架来创建App:.NET for Android、.NET for iOS、.NET for macOS以及Windows UI 3(WinUI 3)库。这些框架都可以访问同样的.NET 6基类库(Base Class Library,BCL)。这个库将底层平台的细节从你的代码中抽象出来。BCL依赖于.NET运行时来为代码提供执行环境。对于Android、iOS和macOS,该环境是由Mono(一种.NET运行时的实现)实现的。在Windows上,.NET CoreCLR提供执行环境。

尽管BCL允许在不同平台上运行的App共享通用业务逻辑,但不同的平台有不同的方法来定义App的UI,并且它们提供了不同的模型来指定UI元素如何通信与交互。你可以使用合适的特定于平台的框架(. NET for Android、.NET for iOS、.NET for macOS或WinUI 3)来为每个平台单独制作UI,但这种方法需要为每种独立的设备维护一套代码库。

.NET MAUI为移动和桌面App构建UI提供了一个(single,且就一个)框架。下图展示了.NET MAUI 应用程序架构的高层次视图:
在这里插入图片描述

可见,为了跨平台,微软做了不少工作啊,加了那么多层。

在.NET MAUI应用程序中,你编写的代码主要与.NET MAUI API(图中①)交互。然后.NET MAUI会直接使用原生平台API(③)。此外,如果需要,应用程序代码也可以直接使用平台API(②),即跳过MAUI层。

.NET MAUI 应用程序可以在PC或Mac上编写,并编译成本地程序包:

  • 使用.NET MAUI构建的Android App会从C#编译成中间语言(intermediate language,IL),然后在App启动时JIT编译成本地程序集。
  • 使用.NET MAUI构建的iOS App完全提前(AOT)从C#编译成原生ARM汇编码。
  • .NET MAUI构建的macOS App,使用Mac Catalyst(这是苹果的一种解决方案,它将你用UIKit构建的iOS App带到桌面,并根据需要增加额外的AppKit和平台API)。
  • .NET MAUI构建的Windows App使用WinUI 3库来创建针对Windows桌面的原生应用程序。

❗注意
构建iOS和macOS应用程序需要Mac。

3. .NET MAUI提供了什么?

.NET MAUI提供了一组控件,用于显示数据、启动动作、指示活动、显示集合、选择数据等等。除了控件外,.NET MAUI还提供了:

  • 用于设计页面的精致的布局引擎。
  • 用于创建丰富导航类型的多个页面类型,如drawer。
  • 支持数据绑定,以实现更优雅和可维护的开发模式。
  • 定制处理程序以增强UI元素表现方式的能力。
  • 用于访问原生设备特性的跨平台API。这些API使应用程序能访问设备自带的功能,如:GPS、加速计、电池和网络状态等。
  • 跨平台图形功能,它提供了一个绘图画布,支持绘画和绘制形状与图像、合成操作以及图形对象转换。
  • 一个单个的项目系统,使用多目标定位Android、iOS、macOS和Windows。
  • .NET热重载,你可以在应用程序运行时修改XAML和托管源代码,然后观察修改后的结果,而不需要重新构建应用程序。

3.1. 设备特性的跨平台API

.NET MAUI提供了用于原生设备特性的跨平台API。.NET MAUI提供的用于访问设备特性的功能示例包括:

  • 访问传感器,例如:设备商的加速计、指南针和陀螺仪。
  • 检查设备的网络连接状态,并检测变化。
  • 提供应用程序正在运行的设备的信息。
  • 在应用程序之间复制和粘贴文本到系统剪贴板。
  • 从设备选取文件。
  • 将数据安全地存储为键值对。
  • 利用内置的文本转换语音引擎从设备中读文本。
  • 启动基于浏览器的身份验证流,监听特定程序注册URL的回调。

3.2. 单一项目

.NET MAUI单一项目将你在开发应用程序时遇到的特定于平台的开发体验抽象为一个针对Android、iOS、macOS和Windows的单一共享项目。

.NET MAUI单一项目提供了简化的、一致的跨平台开发体验,无论目标平台是什么。.NET MAUI单一项目提供以下功能:

  • 一个目标可以是Android、iOS、macOS和Windows的单一共享项目。
  • 一个用于运行.NET MAUI应用程序的简化调试目标选择。
  • 单个项目中的共享资源文件
  • 单个应用程序清单,用于指定应用程序标题、id和版本。
  • 访问特定于平台的API和工具。
  • 单一的跨平台应用程序入口点。

.NET MAUI单一项目是通过多目标和使用.NET 6中的SDK风格项目来实现的。

3.3. 热重载

.NET MAUI还支持.NET热重载,这使你能在应用程序运行时修改托管源代码,而不需要手动暂停或断点。接着,你新编辑的代码可以应用到运行的程序中,而无需重新编译。

.NET MAUI还支持XAML热重载,这使你能在不重新编译的情况下查看运行效果。而且,原导航状态和数据会保持,使你能快速迭代UI而不丢失在应用程序中的位置。

三、结尾

我觉得这节最重要的点是了解架构,知道你在MAUI中拖一个控件,可以在各个平台运行的本质是微软对原生平台进行了封装,抽象出且实现了各种层。这其实不仅仅是MAUI跨平台的本质,其他跨平台开发环境都是这么做的,
在这里插入图片描述
其次,知道MAUI主要是用XAML和C#开发就行。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐