在跨平台開發技術上若單就 UI 層面的跨平台的話,在 .NET 技術上有三套廣為人知的使用 .NET MAUI、Avalonia UI、Uno Platform。其各有千秋,在此就不多談相關比較(若有興趣可參考文後所推薦閱讀連結)。
近期則有比較特別的部分是 Avalonia UI 官方的 GitHub 推出了一個 Repo: Avalonia.MAUI Hybrid
雖然支援有其作業系統上的限制性(目前只支援 iOS、Android 兩套手機作業系統),但仍對 Avalonia UI 來說是一件相當有吸引力的事。
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}");
}
當然,若要在 Android 或 iOS 上成功的執行上述程式並取得結果,仍需進行該作業系統的 "權限" 的請求設定(詳細設定介紹可參考前句的各平台連結)。
Android 的要啟用 "地理位置" 資訊的權限,最簡單的設定方式可以透過 Visual Studio 的 "AndroidManifest.xml" 直接設定其中的 "Required permissions":
iOS 平台要啟用 "地理位置" 資訊的權限,最簡單的方式可以透過 Visaul Studio 的 PList Editor 來進行編輯:
完成後就能順利執行該應用到各平台中,並取得地理位置囉~~~
下為 Android 透過模擬器測試執行結果:
BTW, 若有興趣進一步了解透過 XAML 實踐的 UI Framework 發展史及 .NET MAUI、Avalonia UI、Uno Platform 的詳細比較,可參考下列連結:
https://www.cnblogs.com/siyunianhua/p/18134830
如果有興趣了解要動手時如何完成的話,請繼續到 "Avalonia.MAUI Hybrid 之使用 .NET MAUI Essentials 實作篇 - I" 來看看唷!!
I'm a Microsoft MVP - Developer Technologies (From 2015 ~).
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" 軟體製作。