调研capacitor兼容openharmony平台可行性

发布时间 2023-08-11 15:47:09作者: 汪氵淼

团队可能需要对开源的 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