调研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 |
调研capacitor兼容openharmony平台可行性的更多相关文章
- 微软官方网站线上兼容测试平台-Browser screenshots
前端开发时最不想做的就是在不同浏览器.平台和分辨率测试网页显示效果,通常这会浮现许多问题,尤其浏览器版本就可能让显示成效完全不同,也只好尽力维持让每一种设备都能正常浏览网页.修改到完全没有问题必须投入 ...
- io.js - 兼容 NPM 平台的 Node.js 新分支
io.js(JavaScript I/O)是兼容 NPM 平台的 Node.js 新分支,由 Node.js 的核心开发者在 Node.js 的基础上,引入更多的 ES6 特性,它的目的是提供更快的和 ...
- 深度挖掘,Html5的 Range 滑动刻度的坑,兼容全平台,将任性进行到底!
最近2天一直在弄一个滑动的刻度效果,由于项目是基于Web App开发的,于是考虑到 移动端和pc端 的兼容性问题,考虑的比较多,尝试采用 Html5的Range 来做,目前已经兼容 pc端和移动端! ...
- 重磅发布丨乐维监控:全面兼容云平台,助力企业DevOps转型升级!
2019年伊始,我们迎来了乐维监控的又一重大功能更新——云平台监控,这将有效帮助企业将云上.云下数据聚合,方便统一化的监控管理与维护!未来,乐维监控每一次的产品功能及版本更新,我们都将第一时间于此发布 ...
- vue3+quasar+capacitor开发多平台项目,使用cordova和capacitor插件(支持所有前端框架)
先看文档 框架文档地址:https://quasar.dev/start/quasar-cli 创建项目 npm init quasar 运行与打包命令 npx quasar dev npx quas ...
- vue3+quasar+capacitor开发多平台项目,使用quasar改变主题背景
quasar的样式和其他的框架修改不太一样,需要我们使用动态的方式来进行变更,一般来说有两种方案进行主题修改 方案一: 修改样式所需文档: 这里是样式修改的说明:https://quasar.dev/ ...
- Androidndk开发打包时我们应该如何注意平台的兼容(x86,arm,arm-v7a)
很多朋友在开发Android JNI的的时候,会遇到findlibrary returned null的错误,因为某种原因,so没有打包到apk中.下面浅析下引起该错误的原因以及平台兼容性问题. 一. ...
- findlibrary returned null产生的联想,Android ndk开发打包时我们应该怎样注意平台的兼容(x86,arm,arm-v7a)
非常多朋友在开发Android JNI的的时候,会遇到findlibrary returned null的错误,由于某种原因,so没有打包到apk中.以下浅析下引起该错误的原因以及平台兼容性问题. A ...
- xss利用和检测平台
xssing 是安全研究者Yaseng发起的一个基于 php+mysql的 网站 xss 利用与检测开源项目,可以对你的产品进行黑盒xss安全测试,可以兼容获取各种浏览器客户端的网站url,cooki ...
- h5专题应该兼容那些浏览器?
本人做专题还不算很多,但是也很腻烦了.一般一个专题制作也就3天,可是调试得4/5天.除了销售客户各种无休止的改改改.还有一点很重要就是浏览器的兼容性.刚开始做专题的时候天真的以为苹果只要兼容到ipho ...
随机推荐
- 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 ...
- Redis数据结构二之SDS和双向链表
本文首发于公众号:Hunter后端 原文链接:Redis数据结构二之SDS和双向链表 这一篇笔记介绍一下 SDS(simple dynamic string)和双向链表. 以下是本篇笔记目录: SDS ...
- HNU2019 Summer Training 3 E. Blurred Pictures
E. Blurred Pictures time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Isito 入门:为什么学 Istio、Istio 是什么
1,Istio 概述 聊聊微服务设计 似乎用上 Kubernetes ,就是微服务系统了. 碰到很多人或公司盲目崇拜 Kubernetes ,一直喊着要上 Kubernetes,但是本身既没有技术储备 ...
- Galaxy Project | 一些尝试与思考
很久都没有更新推文了,脑壳羞涩,快码不出字的节奏! 最近在尝试内部 Galaxy 一些新工具的开发和 Galaxy 核心版本的升级测试,发现一些问题,简单记录和聊一下吧. 一些尝试 对于在线的 web ...
- wait_timeout and interactive_timeout 参数
wait_timeout and interactive_timeout 参数 非交互模式连接:通常情况下,应用到RDS实例会采用非交互模式,具体采用哪个模式需要查看应用的连接方式配置,比如PHP通过 ...
- 龙芯下如何进行.net core程序开发部署
龙芯LoongArch64已经发布了对.NETCore的支持,相关工具链也已完成,目前支持.NETCore3.1..NET6..NET7版本.本文以.NETCore3.1在loongnix-serve ...
- OSI七层协议剩余、socket模块、半连接池
传输层之TCP与UDP协议 TCP与UDP都是用来规定通信方式的 通信的时候可以随心所欲的聊 也可以遵循一些协议符合要求的聊 随心所欲的聊:文字 图片 视频 遵循一些协议:开头带尊称 首行空两个 只准 ...
- 从AWS中学习如何使用AmazonDynamoDB存储卷
目录 <35. <从 AWS 中学习如何使用 Amazon DynamoDB 存储卷>>:从 AWS 中学习如何使用 Amazon DynamoDB 存储卷 随着云计算技术的迅 ...
- .Net全网最简Redis操作
支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac. Redis作为一款主流的缓存工具在业内已广受欢迎.本文将会介绍操作R ...