Blazor Hybrid適配到HarmonyOS系統
1. 前言
Blazor Hybrid是一個基于Web技術的MVVM開發模式的客戶端框架,它只有UI是由Webview渲染,而邏輯均由.NET開發,可以突破瀏覽器限制訪問本地文件,或者發起TCP或者UDP請求,相比Electron框架,理論上性能會更好。
當我適配完.NET運行時,覺得應該快速適配一個UI框架,方便.NET開發者嘗鮮,Avalonia目前完成度很低,還有一系列難以解決的問題,所以我想到Blazor Hybrid或許會更容易一些。
跟我想的差不多,大概只用了三天的時間就完成了適配,今天跟大家分享一下。
2. 項目狀態
項目已完成適配,暫時沒有發現明顯的Bug,但是相比安卓或者iOS平臺缺少原生API的包裝庫,只能調用C#標準庫,或者通過P/Invoke特性調用HarmonyOS的原生SDK(NDK)。
代碼倉庫: https://github.com/OpenHarmony-NET/OpenHarmony.Blazor.Hybrid
運行截圖:

3. 使用方式
- 打開
OpenHarmony.Blazor.Hybrid.sln解決方案,并發布BlazorApp項目。 - 使用Deveco Studio打開
OHOS_Project,配置好簽名后即可運行程序。
另外可以通過chrome或者edge的devtools來調試手機中的webview(不包含.NET),詳情參考: Devtools工具 - 華為HarmonyOS文檔
4. 適配原理
Blazor和.NET交互是通過js的window.external.sendMessage和window.external.receiveMessage來實現的, 只需要在webview里實現這兩個函數,然后調用Blazor.start();啟動Blazor,這部分代碼請參考:https://github.com/OpenHarmony-NET/OpenHarmony.Blazor.Hybrid/blob/main/Src/BlazorApp/wwwroot/openharmony.js
一般Webview控件都會有原生代碼與webview內的js交互的機制,HarmonyOS中是借助WebMessagePort機制實現的,關于WebMessagePort請參考官方文檔: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-webview-V13#webmessageport
Blazor Hybrid內部使用了基于反射的序列化,所以要為項目開啟"默認啟用基于反射的序列化",并配置rd.xml保留需要反射的元數據
為了保證Blazor Hybrid的異步任務可以正常的運行,需要實現一個單線程同步上下文,因為默認是多線程調度異步,而客戶端往往需要單線程調度,代碼: BlaozrDispatcher.cs

浙公網安備 33010602011771號