调研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 操作系统平台的应用。
实现路径:
- 开发注入 js 代码模块(ets 实现)
- 修改 capacitor 的 native-bridge 模块(ts 实现)以支持注入 js 和双工通信
- 开发 WebViewLocalServer 模块(ets 实现),支持多种协议和自定义协议的 scheme
- 搭建基于 Stage 模型的 ArkTS 应用模板
- 开发 OpenHarmony 的应用构建脚本
- 移植数个 capacitor 核心插件(app,fs 等)
注: OpenHarmony 平台同时支持 Java 应用和 FA 模型的 JS 应用,但都已不推荐。
预期工作量
模块 | 主要工作 | 时间 | 备注 |
---|---|---|---|
JSInjector | 从零实现 | 5人日 | |
NativeBridge | 增加改动 | 5人日 | |
WebviewLocalServer | 从零实现 | 10人日 | |
OHTemplate | 从零实现 | 5人日 | |
Build Script | 从零实现 | 5人日 | |
CorePlugin Porting | 从零实现 | 5人日/组件 | 需熟悉OH API |