Avalonia.MAUI Hybrid 之使用 .NET MAUI Essentials 介紹篇

在跨平台開發技術上若單就 UI 層面的跨平台的話,在 .NET 技術上有三套廣為人知的使用 .NET MAUI、Avalonia UI、Uno Platform。其各有千秋,在此就不多談相關比較(若有興趣可參考文後所推薦閱讀連結)。

近期則有比較特別的部分是 Avalonia UI 官方的 GitHub 推出了一個 Repo: Avalonia.MAUI Hybrid

雖然支援有其作業系統上的限制性(目前只支援 iOS、Android 兩套手機作業系統),但仍對 Avalonia UI 來說是一件相當有吸引力的事。

圖片擷取自 https://github.com/AvaloniaUI/AvaloniaMauiHybrid

macOS 不支援原因:

 .NET MAUI 是基於 Mac Catalyst 來處理與完成在 macOS 上的運作,而如果對 Apple 的開發體系有深入一點的了解,也可以知道 Mac Catalyst 是 Apple 基於要讓 iPad 的 App 能夠運作於 macOS 上的處理,但 Avalonia UI 是直接使用 macOS SDK 的處理,所以目前 Hybrid 比較處於無解的狀態,可參考此 issue 的討論。

Windows 不支援原因:

但也不是不支援,要看要用的是 WPF 還是 WinUI,不過話說回來對 .NET 開發人員來講,在 Windows 上的開發應該是基本(?),會要多談到如何運用相關的 Hybrid 處理應該是少數,但還是試試看的話仍可參考此 issue 的討論。

而推出此套件的用意最主要是要滿足下列三種情境:

  • 將 Avalonia UI 的控制項嵌入至 MAUI 的 Page 中。
    (原文: Embedding Avalonia controls inside MAUI pages.)
  • 將 MAUI 的控制項嵌入至 Avalonia 的 Views 中。
    (原文: Embedding MAUI controls inside Avalonia views.)
  • 從 Avalonia 中能直接呼叫 .NET MAUI Essentials APIs。
    (原文: Calling MAUI Essentials APIs from Avalonia.)

以前面兩點,去使用的理由可能就稍嫌薄弱了(薄弱?跨平台技術都很少人用了還嫌薄弱…),但如果有必要在 .NET MAUI 跟 Avalonia UI 之間互相混用控制項時,這也不失為一個很不錯的方式。

而最後一點就對已經熟悉 MAUI 的開發者來說就具吸引力了些(對…自嗨可以了吧!?)。

由於 .NET MAUI Essentials 已在 .NET 6 正式推出前,整合進 .NET MAUI 的工作負載的處理當中,也如同過去的 Xamairn.Essentials 有提供好其抽象介面來處理各平台的實作。

而如果要在 Avalonia 當中呼叫 .NET MAUI Essentials 的話,請在 Avalonia UI 的專案中安裝此 Nuget:Microsoft.Maui.Essentials

上述 Nuget 套件安裝完成後,如果以相對簡單的 "取得地理位置" 的例子來說:

建立一個 Avalonia UI 的畫面,並且在該畫面當中設計一個按鈕,透過此按鈕點選後能取得 Android 或 iOS 手機中,該作業系統所得到的 "地理位置" 資訊。
private async Task ButtonClick()
{
	...略...
	
    var location = await Geolocation.GetLocationAsync();
    Console.WriteLine($"GeoLoncation Info: {location}");
}

當然,若要在 AndroidiOS 上成功的執行上述程式並取得結果,仍需進行該作業系統的 "權限" 的請求設定(詳細設定介紹可參考前句的各平台連結)。

 

Android 的要啟用 "地理位置" 資訊的權限,最簡單的設定方式可以透過 Visual Studio 的 "AndroidManifest.xml" 直接設定其中的 "Required permissions":

Android 專案中使用 Visaul Studio 直接開啟 AndroidManifest.xml 設定

 

iOS 平台要啟用 "地理位置" 資訊的權限,最簡單的方式可以透過 Visaul Studio 的 PList Editor 來進行編輯:

iOS 專案中使用 Visaul Studio 直接開啟 info.plist 設定

 

完成後就能順利執行該應用到各平台中,並取得地理位置囉~~~

下為 Android 透過模擬器測試執行結果: 

 

BTW, 若有興趣進一步了解透過 XAML 實踐的 UI Framework 發展史及 .NET MAUIAvalonia UIUno Platform 的詳細比較,可參考下列連結:
https://www.cnblogs.com/siyunianhua/p/18134830

 

如果有興趣了解要動手時如何完成的話,請繼續到 "Avalonia.MAUI Hybrid 之使用 .NET MAUI Essentials 實作篇 - I" 來看看唷!!


 


I'm a Microsoft MVP - Developer Technologies (From 2015 ~).
 

MVP_Logo



I focus on the following topics: Xamarin Technology, Azure, Mobile DevOps, and Microsoft EM+S.

If you want to know more about them, welcome to my website:
https://jamestsai.tw 


本部落格文章之圖片相關後製處理皆透過 Techsmith 公司 所贊助其授權使用之 "Snagit" 與 "Snagit Editor" 軟體製作。