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
参考资料:
Blazor Hybrid适配到HarmonyOS系统的更多相关文章
- Blazor Hybrid (Blazor混合开发)更好的读取本地图片
在 Blazor Hybrid 应用中,Razor 组件在设备上本机运行. 组件通过本地互操作通道呈现到嵌入式 Web View 控件. 组件不在浏览器中运行,并且不涉及 WebAssembly. R ...
- Blazor Hybrid / MAUI 简介和实战
1. Blazor Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 UI. 共享使用 .NET 编写的服务 ...
- Bootstrap Blazor Viewer 图片浏览器 组件更新, 支持流转图片(ImageFromStream), 用于本地项目例如 MAUI Blazor,Blazor hybrid
示例: https://blazor.app1.es/viewer 使用方法: 1.nuget包 BootstrapBlazor.Viewer 2._Imports.razor 文件 或者页面添加 添 ...
- 仿照微信的效果,实现了一个支持多选、选原图和视频的图片选择器,适配了iOS6-9系统,3行代码即可集成.
提示:如果你发现了Bug,请尝试更新到最新版.目前最新版是1.6.4,此前的版本或多或少存在一些bug的~如果你已经是最新版了,请留一条评论,我看到了会尽快处理和修复哈~ 关于升级iOS10和Xcdo ...
- iOS:界面适配(三)--iPhone不同机型或设备不同尺寸适配(屏幕适配)和系统适配
对于不同苹果设备,各个参数查看<iOS:机型参数.sdk.xcode各版本>. 机型变化 坐标:表示屏幕物理尺寸大小,坐标变大了,表示机器屏幕尺寸变大了: 像素:表示屏幕图片 ...
- 【亲测】appium_v1.4.16版本自动化适配android7.0系统
要解决的问题:appium在androidV7.0系统上运行时报错 Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.a ...
- appium_server_v1.4.16版本不适配android7.0系统,运行报错“Attempt to re-install io.appium.settings without first uninstalling”
要解决的问题:appium在androidV7.0系统上运行时报错 Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.a ...
- appium_v1.4.16版本自动化适配android7.0系统
https://www.cnblogs.com/imlvbu/p/7127940.html 要解决的问题:appium在androidV7.0系统上运行时报错 Failure [INSTALL_FAI ...
- lua(wax框架) 适配 64位操作系统
======================使wax框架真正兼容64位系统========================== 苹果强制要求所有新提交的应用必须兼容64位,但原来使用lua的框架wax ...
- 适配iOS10 调取系统打电话功能
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: [NSString stringWithFormat:@"t ...
随机推荐
- 中电金信:向“新”而行—探索AI在保险领域的创新应用
大模型的应用已经渗透到各个领域,并展现出惊人的潜力.在自然语言处理方面,大模型用于机器翻译.文本摘要.问答系统等:在计算机视觉领域,应用于图像识别.目标检测.视频分析等:此外,大模型也应用于语音识别. ...
- 【C#】【MySQL】【配置数据源】SSL Connection error 发生一个或多个错误。由于·意外的数据包格式,握手失败
[编程语言]C# [数据库]MySQL [控件]SqlDataSource [问题描述]使用SqlDataSource远程连接数据库时,测试连接发生如下错误:"SSL Connection ...
- Qt编写地图综合应用30-世界地图
一.前言 世界地图也属于区域地图的一种,最开始做项目的时候只有国内的地图需求,后面有个客户他们的产品是面向国际市场,所以在大屏展示的时候,必须展示一张世界地图,所有箭头动态流向中国,当然这些都要离线使 ...
- Qt编写百度地图综合应用(在线+离线+区域)
一.前言 在现在很多的应用系统中,会提供一个地图模块,地图相关的应用和app也是非常多,最广泛的应用就属于导航,地图基本上分在线的和离线的两种,在线的一般都是实时的,数据也是最新的,速度很快路线很准, ...
- Qt通用方法及类库3
函数名 //设置全局样式 static void setStyle(QUIWidget::Style style); static void setStyle(const QString &q ...
- Datawhale冬令营第二期!😀Task 1
Datawhale冬令营第二期-Task1:动手体验AI辅助编程:番茄钟 对应链接:https://www.datawhale.cn/activity/116/23/94?rankingPage=1 ...
- 9.4classtest rewrite(仓库管理系统)
第一部分,设计界面以及类的定义. import java.util.Scanner; public class viovo { static int number = 5;//五个商品信息 stati ...
- [开源项目]YOLOv8_Efficient
Yolov8_Efficient Simple and efficient use for yolov8 About This is an unofficial repository maintain ...
- 题解:AT_abc386_d [ABC386D] Diagonal Separation
分析题面,发现题目求的是是否存在一个白点被 \((1, 1)\) 和任意一个黑点围成的矩形内. 先将所有黑点按 \(x\) 坐标排序. 枚举所有的白点. 找到所有横坐标不比该白点横坐标小的所有黑点的纵 ...
- 第一章 Java集合框架
----------------------------------------------------------------------------- Java集合框架(一)-ArrayList ...