maui的學習之路 -- 開篇

maui的學習之路 -- 開篇

什麼是.net maui

最后更新 2022/6/23 下午11:08
轩研 Maui开发者
预计阅读 6 分钟
分类
MAUI
标签
.NET C# 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)
  • windows 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 (網頁技術棧方向)

相關學習連結:

Keep Exploring

延伸阅读

更多文章