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

调研capacitor兼容openharmony平台可行性的更多相关文章

  1. 微软官方网站线上兼容测试平台-Browser screenshots

    前端开发时最不想做的就是在不同浏览器.平台和分辨率测试网页显示效果,通常这会浮现许多问题,尤其浏览器版本就可能让显示成效完全不同,也只好尽力维持让每一种设备都能正常浏览网页.修改到完全没有问题必须投入 ...

  2. io.js - 兼容 NPM 平台的 Node.js 新分支

    io.js(JavaScript I/O)是兼容 NPM 平台的 Node.js 新分支,由 Node.js 的核心开发者在 Node.js 的基础上,引入更多的 ES6 特性,它的目的是提供更快的和 ...

  3. 深度挖掘,Html5的 Range 滑动刻度的坑,兼容全平台,将任性进行到底!

    最近2天一直在弄一个滑动的刻度效果,由于项目是基于Web App开发的,于是考虑到 移动端和pc端 的兼容性问题,考虑的比较多,尝试采用 Html5的Range 来做,目前已经兼容 pc端和移动端! ...

  4. 重磅发布丨乐维监控:全面兼容云平台,助力企业DevOps转型升级!

    2019年伊始,我们迎来了乐维监控的又一重大功能更新——云平台监控,这将有效帮助企业将云上.云下数据聚合,方便统一化的监控管理与维护!未来,乐维监控每一次的产品功能及版本更新,我们都将第一时间于此发布 ...

  5. vue3+quasar+capacitor开发多平台项目,使用cordova和capacitor插件(支持所有前端框架)

    先看文档 框架文档地址:https://quasar.dev/start/quasar-cli 创建项目 npm init quasar 运行与打包命令 npx quasar dev npx quas ...

  6. vue3+quasar+capacitor开发多平台项目,使用quasar改变主题背景

    quasar的样式和其他的框架修改不太一样,需要我们使用动态的方式来进行变更,一般来说有两种方案进行主题修改 方案一: 修改样式所需文档: 这里是样式修改的说明:https://quasar.dev/ ...

  7. Androidndk开发打包时我们应该如何注意平台的兼容(x86,arm,arm-v7a)

    很多朋友在开发Android JNI的的时候,会遇到findlibrary returned null的错误,因为某种原因,so没有打包到apk中.下面浅析下引起该错误的原因以及平台兼容性问题. 一. ...

  8. findlibrary returned null产生的联想,Android ndk开发打包时我们应该怎样注意平台的兼容(x86,arm,arm-v7a)

    非常多朋友在开发Android JNI的的时候,会遇到findlibrary returned null的错误,由于某种原因,so没有打包到apk中.以下浅析下引起该错误的原因以及平台兼容性问题. A ...

  9. xss利用和检测平台

    xssing 是安全研究者Yaseng发起的一个基于 php+mysql的 网站 xss 利用与检测开源项目,可以对你的产品进行黑盒xss安全测试,可以兼容获取各种浏览器客户端的网站url,cooki ...

  10. h5专题应该兼容那些浏览器?

    本人做专题还不算很多,但是也很腻烦了.一般一个专题制作也就3天,可是调试得4/5天.除了销售客户各种无休止的改改改.还有一点很重要就是浏览器的兼容性.刚开始做专题的时候天真的以为苹果只要兼容到ipho ...

随机推荐

  1. 2022-08-07:以下go语言代码输出什么?A:1 1;B:3 1;C:0 3;D:不能编译。 package main import ( “fmt“ “math“ ) func main

    2022-08-07:以下go语言代码输出什么?A:1 1:B:3 1:C:0 3:D:不能编译. package main import ( "fmt" "math&q ...

  2. Redis数据结构二之SDS和双向链表

    本文首发于公众号:Hunter后端 原文链接:Redis数据结构二之SDS和双向链表 这一篇笔记介绍一下 SDS(simple dynamic string)和双向链表. 以下是本篇笔记目录: SDS ...

  3. HNU2019 Summer Training 3 E. Blurred Pictures

    E. Blurred Pictures time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. Isito 入门:为什么学 Istio、Istio 是什么

    1,Istio 概述 聊聊微服务设计 似乎用上 Kubernetes ,就是微服务系统了. 碰到很多人或公司盲目崇拜 Kubernetes ,一直喊着要上 Kubernetes,但是本身既没有技术储备 ...

  5. Galaxy Project | 一些尝试与思考

    很久都没有更新推文了,脑壳羞涩,快码不出字的节奏! 最近在尝试内部 Galaxy 一些新工具的开发和 Galaxy 核心版本的升级测试,发现一些问题,简单记录和聊一下吧. 一些尝试 对于在线的 web ...

  6. wait_timeout and interactive_timeout 参数

    wait_timeout and interactive_timeout 参数 非交互模式连接:通常情况下,应用到RDS实例会采用非交互模式,具体采用哪个模式需要查看应用的连接方式配置,比如PHP通过 ...

  7. 龙芯下如何进行.net core程序开发部署

    龙芯LoongArch64已经发布了对.NETCore的支持,相关工具链也已完成,目前支持.NETCore3.1..NET6..NET7版本.本文以.NETCore3.1在loongnix-serve ...

  8. OSI七层协议剩余、socket模块、半连接池

    传输层之TCP与UDP协议 TCP与UDP都是用来规定通信方式的 通信的时候可以随心所欲的聊 也可以遵循一些协议符合要求的聊 随心所欲的聊:文字 图片 视频 遵循一些协议:开头带尊称 首行空两个 只准 ...

  9. 从AWS中学习如何使用AmazonDynamoDB存储卷

    目录 <35. <从 AWS 中学习如何使用 Amazon DynamoDB 存储卷>>:从 AWS 中学习如何使用 Amazon DynamoDB 存储卷 随着云计算技术的迅 ...

  10. .Net全网最简Redis操作

    支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac. Redis作为一款主流的缓存工具在业内已广受欢迎.本文将会介绍操作R ...