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布局。

d4c5cd7a424cb0b1b8c36e9df92cb8e1.png

.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应用的体系结构的高级视图:

cb36af93c0d51ec28a30afa063040bac.png

.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)(通常不需要,如果你需要调用一些硬件)

    • UIKitAppkit, MacOS 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 (网页技术栈方向)

相关学习链接:

  • Maui:.NET 多平台应用 UI 文档 - .NET MAUI | Microsoft Docs [1]

  • C#平台调用:平台调用 (P/Invoke) | Microsoft Docs[2]

  • Windows Api: pinvoke.net: memcpy (msvcrt)[3]

  • WinUI3: 创建第一个WinUI 3(Windows 应用 SDK)项目 - Windows apps | Microsoft Docs[4]

  • UIKIT:UIKit Namespace | Microsoft Docs [5]

  • AppKit: AppKit Namespace | Microsoft Docs[6]

  • Community ToolKit:使用 .NET 多平台应用 UI (.NET MAUI) Community Toolkit入门 - .NET Community Toolkit | Microsoft Docs [7]

参考资料

[1]

.NET 多平台应用 UI 文档 - .NET MAUI | Microsoft Docs : https://docs.microsoft.com/zh-cn/dotnet/maui/

[2]

平台调用 (P/Invoke) | Microsoft Docs: https://docs.microsoft.com/zh-cn/dotnet/standard/native-interop/pinvoke

[3]

pinvoke.net: memcpy (msvcrt): https://www.pinvoke.net/default.aspx/msvcrt/memcpy.html

[4]

创建第一个WinUI 3(Windows 应用 SDK)项目 - Windows apps | Microsoft Docs: https://docs.microsoft.com/zh-cn/windows/apps/winui/winui3/create-your-first-winui3-app

[5]

UIKit Namespace | Microsoft Docs : https://docs.microsoft.com/zh-cn/dotnet/api/uikit?view=xamarin-ios-sdk-12

[6]

AppKit Namespace | Microsoft Docs: https://docs.microsoft.com/zh-cn/dotnet/api/appkit?view=xamarin-mac-sdk-14

[7]

使用 .NET 多平台应用 UI (.NET MAUI) Community Toolkit入门 - .NET Community Toolkit | Microsoft Docs : https://docs.microsoft.com/zh-cn/dotnet/communitytoolkit/maui/get-started

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PhotoScan精品教程】任务二:刺像控点,平差,质量报告精度检查,像控点POS权重调配

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) 【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三 【PhotoScan精品教程】任务二:刺像控点,平差,质量报告精度检查,像控点POS权重调配 【PhotoScan…

互联网架构的演变,看了好多这个讲的确实清楚!

从过去的 OA、CRM、ERP 等单机即可满足要求的系统到现代互联网时代各大公司的分布式、微服务平台,互联网架构正在经历着巨大的变革,技术也在不断的更新迭代。 图片来自 Pexels这也意味着众多软件开发者们的压力和挑战正在不断的加大,这种新技…

【Inpho精品教程】Inpho简介、安装教程(附Inpho8安装包下载)

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) Inpho UASMaster是Trimble公司旗下的一款摄影测量处理软件。本文讲解Inpho简介、安装教程(附Inpho8安装包下载)。 文章目录 1. Inpho简介2. Inpho安装教程3. Inpho8下载地址1. Inpho简介 1.1 主…

MAUI使用Masa blazor组件库

上一篇(点击阅读)我们实现了UI在Web端(Blazor Server/Wasm)和客户端(Windows/macOS/Android/iOS)共享,这篇我加上 Masa Blazor[2]组件库的引用,并把前几个月写的时间戳转换[3]工具加上。1. 前置知识关于Masa Blazor请点击Masa Blazor官网[4]了解&#xf…

常用的NSLOG日志打印格式

2019独角兽企业重金招聘Python工程师标准>>> 常用的NSLOG日志打印格式 以下是常用的LOG打印,如果有特殊,请我 ,这边会不定期更新。 % 对象 %d, %i 整数 %u 无符整形 %f 浮点/双字 %x, %X 二进制整数 %…

Android studio提示Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.

1、 问题 在Android studio里面运行java的lib库,但是错误提示如下 Build file F:\sourceZip\app\build.gradle line: 2An exception occurred applying plugin request [id: com.android.application] > Failed to apply plugin com.android.internal.applicat…

[转]浅析DDD(领域驱动设计)

最近在做一些微服务相关的设计,内容包括服务的划分,Restful API的设计等。其中比较棘手的就是Service的职责划分:如何抽象具有统一业务范畴的Model,使其模块化,又如何高度提炼并组合多模块,使得业务可独立服…

【PhotoScan精品教程】任务三:生成密集点云、生成网格、生成DEM、生成DOM

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) 【PhotoScan精品教程】任务一:新建工程、导入照片、设置坐标系、导入控制点(POS)、自由空三 【PhotoScan精品教程】任务二:刺像控点,平差,质量报告精度检查,像控点POS权重调配 【PhotoScan…

windows环境实现批量加密文件,并创建加密文件同名(不带后缀)的文件夹,然后把加密文件和图片和文本放入这个文件夹。

1、 需求 我想把资源文件先加密成压缩文件,然后同时创建每个加密压缩文件同名的文件夹,同时需要把这个加密文件拷贝到这个同名的文件夹,然后还需要把一个图片和一个文本文档同时放进这个文件夹,然后在不加密压缩这个文件夹&#…

.NET7之MiniAPI(特别篇) :Preview5优化了JWT验证(上)

在.NET7的Preview5中,优化了asp.net core中的JWT验证,不用像以前繁琐了,更重要的是带来了一组生成Token的工具,可以让开发人员或测试人员不需登录获取Token,而达到测试的目的。创建项目现在来看一下怎么使用&#xff0…

iOS - UTI

一、UTI概念 1、什么是UTI Uniform Type Identifier,是字符串,格式标识符。 根据UTI,可得到相应的其他类型的格式标识符。比如public.jpeg对应于: A four-character file type code (an OSType) of JPEGA filename extension of .…

【Inpho精品教程】任务一:Inpho预处理准备(Pix4d生成未畸变图像、Pix4d生成相机参数文件)

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) Inpho软对于初学者来说,可能不像pix4d、PhotoScan等那么得心应手,处理过程也稍微有些复杂。Inpho处理的是POS分离的照片,在新建工程之前,需要获取相机参数、未畸变图像等,而这些前期的工作一…

学习MongoDB(三) Add an Arbiter to Replica Set 集群中加入仲裁节点

Add an Arbiter to Replica Set 在集群中加入仲裁节点,当集群中主节点挂掉后负责选出新的主节点,仲裁节点也是一个mongo实力,但是它不存储数据。 1、仲裁节点消耗很小的资源,而且不需要专用的服务器。 2、不能把仲裁节点安装到集…

[转]new Thread的弊端及Java四种线程池的使用

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用。本文是基础篇,后面会分享下线程池一些高级功能。 1、new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() {Overridepublic void run() …

【Inpho精品教程】任务二:Inpho创建工程(创建项目、新建相机参数、导入照片、导入POS、生成航条、保存项目)

《无人机航空摄影测量精品教程》合集目录(Pix4d、CC、EPS、PhotoScan、Inpho) 在任务一中,我们做了Inpho创建工程前的数据预处理工作,获取了未畸变的图像、相机参数、Inpho支持的POS等数据,本文在此基础之上,创建Inpho工程,主要步骤有:创建项目、新建相机参数、导入照片…

return view详解

1、return View(); 返回值 类型:System.Web.Mvc.ViewResult将视图呈现给响应的 View() 结果。 注释 View() 类的此方法重载将返回一个具有空 ViewName 属性的 ViewResult 对象。 如果你正在编写控制器操作的单元测试,则需为那些不采用字符串视图名称的单…

C语言试题九十一之写一个程序,用公式π/4=1-1/3+1/5-1/7+...,求π的近似值,直到最后一项的绝对值小于10^-8为止。

1、题目 写一个程序,用公式π/4=1-1/3+1/5-1/7+...,求π的近似值,直到最后一项的绝对值小于10^-8为止。 2 、温馨提示 C语言试题汇总里可用于计算机二级C语言笔试、机试、研究生复试中C程序设计科目、帮助C语言学者打好程序基础、C语言基础,锻炼您的逻辑思维和解决问…

C# 切换中英文输入法

本文经原作者授权以原创方式二次分享,欢迎转载、分享。原文作者:唐宋元明清原文地址:https://www.cnblogs.com/kybs0/p/10298697.htmlC# 切换中英文输入法在界面输入时,有时需要限定输入法。在不自定义正则表达式或者其它输入处理…

[转].NET 开源项目 Polly 介绍

今天介绍一个 .NET 开源库:Polly,它是支持 .NET Core 的,目前在 GitHub 的 Star 数量已经接近 5 千,它是一个强大且实用的 .NET 库。 Polly 介绍 官方对 Polly 的介绍是这样的: Polly is a .NET resilience and tran…

「 刘一哥GIS」CSDN专业技术博文专栏目录索引

刘一哥GIS 个人简介:刘一哥,多年研究地图学、地理信息系统、遥感、摄影测量和GPS等应用,精通ArcGIS等软件的应用,精通多门编程语言,擅长GIS二次开发和数据库系统开发,具有丰富的行业经验,致力于…