• 调研capacitor兼容openharmony平台可行性


    团队可能需要对开源的 capacitor 跨平台框架进行扩展,以生产支持 OpenHarmony 平台的应用,在此调研可行性、实现路径和预期工作量。

    可行性分析

    在验证 capacitor 是否可以将 OpenHarmony 作为生成应用的目标平台之前,需先弄清 capacitor-android 是如何支持一个 web 应用在 android 平台上部署的,其关键点如下:

    功能作用 Android OpenHarmony
    web 应用的运行环境 android.webkit.WebView @ohos.web.webview
    web server 实现 自定义实现 WebViewLocalServer,通过 uriMatcher 拦截 uri 实现 http(s)代理 【TODO】 支持加载本地自定义文件,且可通过 onInterceptRequest 拦截跳转/重定向请求
    注入 js 代码(capacitor, 插件, 全局变量) webView.addJavascriptInterface 【TODO】 可通过 JavaScriptReplyProxy 和 runJavaScript 组合实现
    注入 js 方法(native 侧接口) android.webkit.JavascriptInterface webviewController.registerJavaScriptProxy
    通信: native--->js androidx.webkit.JavaScriptReplyProxy WebviewController.postMessage
    通信: js--->native 调用注入 js 的 native 接口(androidBridge.postMessage) 通过 web_webview postMessage 传输的 port 进行通信
    http request/response 自定义实现 HttpRequestHandler 和 CapacitorHttp WebResourceRequest 和 WebResourceResponse
    特点 接口全面,可对 webview 的行为进行细粒度配置 支持 native(ets)直接调 js 方法(webviewController.runJavaScript)

    OpenHarmony 在 web_webview 子系统上的进展

    OpenHarmony 从 API Version 9 (对应 v3.2) 起提供了 createWebMessagePorts/postMessage 的支持,完成了 native-js 双工通信的建设,基本可满足大多数和 web 相关的应用(以浏览器为典型)在 OpenHarmony 平台上的部署。

    其在 Gitee 的对应任务的描述如下:

    【任务来源】
    新增需求,提供 JS/TS+H5 混合应用开发能力,支撑 web 浏览器、web 地图、备忘录、金山在线文档的开发;

    【任务描述】
    要实现 JS/TS+H5 混合应用开发,web 组件可以开启 JavaScript 接口支持,使用 registerJavaScriptInterface 接口注册对象到 H5,然而基于安全性考虑该方法并非最佳安全实践.除非开发者可以确保完全控制并信任注入对象的内容,否则是不建议使用注入 JS 对象的方法来实现的。因此需要引入 Html 消息通道来更加安全的在网站与应用之间进行消息传递。

    【解决方案】
    新增 createWebMessagePorts/postWebMessage 接口,通过创建消息通道来更加安全的在网站与应用之间进行消息传递。
    1、这里是列表文本应用侧调用 API 接口 CreateWebMessagePorts 创建消息管道,包含两个端口。
    2、应用侧将其中一个端口保留,将另一个端口调用 PostWebMessage 接口发送到 Html5。
    3、Html5 处监听消息事件,接收并保存应用侧发过来的端口。
    之后 htmml5 侧和应用侧通过上述建立的通道,使用端口互相传递消息。

    实现路径

    实现目标: 普通 web 应用通过 ura-capacitor 框架可生产出支持 OpenHarmony 操作系统平台的应用。

    实现路径:

    1. 开发注入 js 代码模块(ets 实现)
    2. 修改 capacitor 的 native-bridge 模块(ts 实现)以支持注入 js 和双工通信
    3. 开发 WebViewLocalServer 模块(ets 实现),支持多种协议和自定义协议的 scheme
    4. 搭建基于 Stage 模型的 ArkTS 应用模板
    5. 开发 OpenHarmony 的应用构建脚本
    6. 移植数个 capacitor 核心插件(app,fs 等)

    注: OpenHarmony 平台同时支持 Java 应用和 FA 模型的 JS 应用,但都已不推荐。

    预期工作量

    模块 主要工作 时间 备注
    JSInjector 从零实现 5人日
    NativeBridge 增加改动 5人日
    WebviewLocalServer 从零实现 10人日
    OHTemplate 从零实现 5人日
    Build Script 从零实现 5人日
    CorePlugin Porting 从零实现 5人日/组件 需熟悉OH API
  • 相关阅读:
    PROTAC与抗体偶联药物的结合
    基于QT5与opencascdae7.4的简易模型浏览器
    2403C++,C++20协程库
    Cards
    代码随想录 | Day 48 - LeetCode 198. 打家劫舍、LeetCode 213. 打家劫舍II、LeetCode 337. 打家劫舍III
    MyBatisPlus-映射匹配兼容性
    [附源码]Python计算机毕业设计Django春晓学堂管理系统
    Vue3 + ts 开发一个ProTable
    React(一):入门React一篇文章就够了 - React + Router + Mobx + Antd
    【图神经网络】图分类学习研究综述[3]:图分类方法评价及未来研究方向
  • 原文地址:https://www.cnblogs.com/hencins/p/17623151.html