团队可能需要对开源的 capacitor 跨平台框架进行扩展,以生产支持 OpenHarmony 平台的应用,在此调研可行性、实现路径和预期工作量。
在验证 capacitor 是否可以将 OpenHarmony 作为生成应用的目标平台之前,需先弄清 capacitor-android 是如何支持一个 web 应用在 android 平台上部署的,其关键点如下:
功能作用
Android
OpenHarmony
web 应用的运行环境
android.webkit.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 从 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 操作系统平台的应用。
实现路径:
注: OpenHarmony 平台同时支持 Java 应用和 FA 模型的 JS 应用,但都已不推荐。
模块
主要工作
时间
备注
JSInjector
从零实现
5人日
NativeBridge
增加改动
5人日
WebviewLocalServer
从零实现
10人日
OHTemplate
从零实现
5人日
Build Script
从零实现
5人日
CorePlugin Porting
从零实现
5人日/组件
需熟悉OH API
手机扫一扫
移动阅读更方便
你可能感兴趣的文章