《WebKit 技术内幕》学习之十五(5):Web前端的未来
5 Crosswalk项目
Crosswalk项目是由英特尔公司发起的一个开源项目,该项目基于WebKit(Blink)和Chromium等开源项目打造,其目的是提供一个跨不同操作系统的Web运行环境,包括Android、Tizen、Linux、Windows、MacOS等众多平台,目前主要支持Android、Tizen和Linux等。如前面描述,Crosswalk是该Web运行环境中能够作为操作系统的一个独立模块或者说是本地应用,而Crosswalk本身不是一个操作系统,具体请读者查看“https://www.crosswalk-project.org/”。不同于Cordova项目,Crosswalk不仅仅提供一些Web接口的扩展,也不是简单的基于系统默认的嵌入式应用接口,如Android WebView,而是使用新Blink和Chromium的能力,加强对HTML5能力的支持,同时加入了Web作为一个运行平台的各种能力,从功能上看,它对Web应用的支持和规范的支持更加完整,图15-5描述了Web应用在Crosswalk上的基本工作过程。
图15-5中可以看到在Android系统和Tizen系统上两者是有些不一样的,这是因为Tizen系统本身是一个直接支持Web应用的操作系统,所以它支持将Web应用(XPK格式)安装到系统中而不需要额外的处理。当用户需要启动Web应用的时候,由Crosswalk加载Web应用的设置并使用运行环境来启动该Web应用。
图15-5 Crosswalk支持Web应用的示意图
在Android系统上,那就是不同的故事了,因为Android系统只是支持本地应用,为此需要特殊的工具将Web应用转换成Android系统的APK。这一工具当然需要满足Android上的特别需求,这里有两个目的。
- 因为Web应用中有名称、图标、加载入口等信息,这些信息需要设置到Android的AndroidManifest.xml中,因此,当用户安装该APK的时候,名称和图标等信息就会显示在应用的列表中,跟其他本地应用看起来一样。
- 满足Android系统只能从Application和Activity类来启动,而不是Web应用。为此,Crosswalk项目提供了一些代码来让Android系统启动Crosswalk运行平台,而该运行平台根据Web应用的设置来启动Web应用。
下面以Android平台上的实现为例说明Crosswalk项目的架构和特性。目前,项目还在不断地发展中,首先理解一下Crosswalk在Android平台上的设计结构,图15-6是Crosswalk在Android系统上的层次结构图。
图15-6 Crosswalk在Android系统上的层次结构图
图15-6中灰色部分完全是Crosswalk提供的新部分,而Content和Blink主要来源于Chromium开源项目,当然也包括一些不同的地方,如性能优化。在这之上即是Crosswalk中的RuntimeCore层和Runtime层。RuntimeCore层使用Content层的桥接层并提供简单易用的Java接口。而Runtime层则包括扩展Web接口的扩展机制、各种Web运行平台的新Web接口(如双屏幕实现的支持等),也包括跟Android系统集成的部分,如对话框、文件选择器等。在这之上就是调用Runtime层的封装层,用来加载Web应用,同时也是为了符合Android系统的需要,包括Activity和Application等具体实现。
根据上面的层次结构图,Crosswalk大致有以下特性。
- 因为使用了最新的Chromium和Blink代码,所以Crosswalk对于HTML5功能的支持非常好,特别是同之前Android系统上提供的基于WebKit的Android移植实现的WebView对比。
- 因为不依赖于操作系统的渲染网页的能力,所以Crosswalk提供统一的接口,而不是在不同平台上支持不同的接口,这样在最大程度上提供了统一的编程接口,当然不是所有接口完全一致。
- Crosswalk中加入了一些特别的优化代码,使得它的性能比较出色,不仅仅是跟WebView对比,而且跟Chromium比较,Crosswalk在某些地方也表现出不一样的性能优势。
- Crosswalk设计并实现了自己的扩展系统,在Android上,是一套提供Java接口的机制,虽然它的内部实现直接修改了Chromium的代码。该系统能够允许Web开发者在需要的时候使用Java或者C++来扩展Web的能力。
- Crosswalk实现了众多W3C定义的关于Web应用方面的规范,如平台的运行模型、各种设备接口等,极大地提升了Web运行环境的能力,同时因为遵守规范,对移植性有极大的好处。
- Crosswalk极好地同Android系统结合起来,小到应用名称、图标,大到应用程序生命周期,各种协议的支持,如电话、用户界面、安全权限等,这一切使Web应用在Android系统之上能够获得跟本地应用类似的体验。
- Crosswalk引入了对很多新功能的支持,如Miracast的支持,它能够支持多屏显示,对很多应用提供了良好的体验。当然还有很多其他的功能,读者可以慢慢挖掘。
对于Web应用的开发者来说,实际上可以在完全不了解这些背后故事的同时依然使用Crosswalk,你所要做的仅是使用一个工具,也就是Crosswalk中的打包工具,该工具可以根据Web应用的设置来自动生成APK文件,开发者可以将该文件上传至Google Play Store就可以了,十分方便,具体的步骤可以参考官网上的文档,有比较详细的描述。
相关文章:
《WebKit 技术内幕》学习之十五(5):Web前端的未来
5 Crosswalk项目 Crosswalk项目是由英特尔公司发起的一个开源项目,该项目基于WebKit(Blink)和Chromium等开源项目打造,其目的是提供一个跨不同操作系统的Web运行环境,包括Android、Tizen、Linux、Windows、MacOS等众多…...
MySQL十部曲之四:MySQL中的数据类型
文章目录 前言概述数字类型数字类型语法数字类型字面量十六进制字面量位字面量布尔字面量 数字类型的属性超出范围和溢出处理 时间和日期类型时间和日期类型语法DATE、DATETIME和TIMESTAMP的异同TIMESTAMP和DATETIME的自动初始化和更新时间和日期字面量 字符串类型字符串类型语…...
flyway使用配置参数和注意事项介绍
文章目录 业务场景参数介绍initSqlsbaselineOnMigratebaselineVersiontargetvalidateOnMigrate SQL注意事项 业务场景 对于生产环境,随着项目版本迭代,数据库结构也会变动。如果一个项目在多个地方实施部署,且版本不一致,就需要一…...
ubuntu_qtcreator安装
https://download.qt.io/official_releases/qtcreator/ 5.15 以上安装 QT5.15以上不再提供离线安装包,只能在线安装,– 下载 下载地址如下: 腾讯云的国内资源: Index of /qt/official_releases/online_installers/ 官网下载:…...
uniapp map自定义气泡窗
uniapp map自定义气泡窗 1、map <template><view><map class"map" :latitude"mapCenter.lat" :longitude"mapCenter.lng" :scale"5" :markers"mapData"><!--自定义冒泡--><cover-view slot&qu…...
数据分析的理念、流程、方法、工具(上)
一、数据的价值 1、数据驱动企业运营 从电商平台的「猜你喜欢」到音乐平台的「心动模式」,大数据已经渗透到了我们生活的每一个场景。不论是互联网行业,还是零售业、制造业等,各行各业都在依托互联网大数据(数据采集、数据存储、…...
qiankun子应用静态资源404问题有效解决(涉及 css文件引用图片、svg图片无法转换成 base64等问题)
在👉🏻 qiankun微前端部署👈🏻这个部署方式的前提下,遇到的问题并解决问题的过程 最开始的问题现象 通过http请求本地的静态json文件404css中部分引入的图片无法显示 最开始的解决方式 在👉dz…...
Python基础(二十九、pymsql)
文章目录 一、安装pymysql库二、代码实践1.连接MySQL数据库2.创建表格3.插入数据4.查询数据5.更新数据6.删除数据 三、完整代码示例四、结论 使用Python的pymysql库可以实现数据存储,这是一种连接MySQL数据库的方式。在本篇文章中,将详细介绍如何使用pym…...
华为机考入门python3--(0)测试题1-句子平均重量
分类:字符串 知识点: 获取输入 input().strip().split(" ") 拼接列表 " ".join(list) 输出指定位数的浮点数 print("%.2f" % value) len() 函数对于很多内置的数据类型都适用,它返回对象的元素个数或长度。…...
Linux--基础开发工具篇(1)(yum)
1.Linux 软件包管理器 yum 1.1yum是什么?什么是软件包? yum是什么? yum是一个软件下载安装管理的一个客户端,就如小米应用商店,华为应用商城。 Linux中软件包可能有依赖关系--yum会帮助我们解决依赖关系的问题。 什么是…...
循环测试之旅——深度解析Pytest插件 pytest-repeat
在软件开发中,测试的重要性不言而喻。而为了提高测试的鲁棒性和可靠性,Pytest插件 pytest-repeat 应运而生。这个插件可以帮助你轻松实现测试用例的循环运行,以更全面地评估代码的稳定性。本文将深入介绍 pytest-repeat 插件的基本用法和实际案例,助你更好地利用循环测试,…...
Java - OpenSSL与国密OpenSSL
文章目录 一、定义 OpenSSL:OpenSSL是一个开放源代码的SSL/TLS协议实现,也是一个功能丰富的加密库,提供了各种主要的加密算法、常用的密钥和证书封装管理功能以及SSL协议。它被广泛应用于Web服务器、电子邮件服务器、VPN等网络应用中&#x…...
谷粒商城【成神路】-【1】——项目搭建
目录 🥞1.整体架构图 🍕2.微服务划分图 🍔3.开发环境 🍔4.搭建git 🌭5.快速搭建服务 🍿6.数据库搭建 🧂7.获取脚手架 🥓8.代码生成器 🍳9.创建公共模块 …...
yml配置文件怎么引用pom.xml中的属性
目录 前言配置测试 前言 配置文件中的一些参数有时要用到pom文件中的属性,做到pom文件变配置文件中也跟着变,那如何才能做到呢,下面咱们来一起探讨学习。 配置 1.首先要在pom.xml中做如下配置,让maven渲染src/main/resources下配…...
SEW MOVIFIT变频一体机配置
1、操作安全 1 断开MOVIFIT-FC 的供电电源后,由于充电电容的存在,严禁立即触摸导电的设备部件和电源接头。 电源切断后,请等待至少1 分钟 2 只要MOVIFIT-FC 重新接通电源,接线盒的电路就必须闭合。也就是说, MOVIFIT-EBOX 以及混合电缆的插头必须插上并拧紧。 3 运行过…...
nginx反向代理负载均衡
一,kali作为负载服务器 打开kali nginx服务,访问页面如下 使用docker拉取nginx,并做出端口映射 ┌──(root?kali)-[/etc/nginx] └─# docker pull nginx ┌──(root㉿kali)-[/etc/nginx] └─# docker run -p 11111:80 --name Jdr -d ng…...
项目中日历管理学习使用
一些项目中会有日历或日期设置,最基本的会显示工作日,休息日,节假日等等,下面就是基于项目中的日历管理功能,要显示工作日,休息日,节假日 效果图 获取国家法定节假日工具类 public class Holi…...
【单片机】使用AD2S1210旋变芯片读取转子位置和速度
历时十天的反复调试,终于跑通了。只能说第一次做这种小工程确实缺乏经验,跟书本上学的还是有些出入。做下记录,方便后面来查看。 0. 实验要求 基于STM32单片机,使用AD2S1210旋变芯片读取电机转子位置和速度。 硬件设施&#x…...
EasyExcel实现导出图片到excel
pom依赖: <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version> </dependency> 实体类: package com.aicut.monitor.vo;import com.aicut.monit…...
Cybellum—信息安全测试工具
产品概述 由于软件和数据在汽车上的使用越来越多,汽车越来越“智能化”,汽车行业面临着重大的信息安全挑战。2021年8月,ISO/SAE 21434正式发布,标准中对汽车的信息安全提出了规范化的要求,汽车信息安全不容忽视。 Cyb…...
六、Kotlin 类型进阶
1. 类的构造器 & init 代码块 1.1 主构造器 & 副构造器在使用时的注意事项 & 注解 JvmOverloads 推荐在类定义时为类提供一个主构造器; 在为类提供了主构造器的情况下,当再定义其他的副构造器时,要求副构造器必须调用到主构造器…...
Chrome 浏览器插件 runtime 字段解析
运行时 runtime 使用 chrome.runtime API 检索 Service Worker,返回有关 manifest.json 的详细信息监听和响应应用或扩展程序生命周期中的事件还可以使用此 API 将网址的相对路径转换为完整的一个 URL 一、权限 Runtime API 上的大多数方法都不需要任何权限 但是…...
七分钟交友匿名聊天室源码
多人在线聊天交友工具,无需注册即可畅所欲言!你也可以放心讲述自己的故事,说出自己的秘密,因为谁也不知道对方是谁。 运行说明: 安装依赖项:npm install 启动:node app.js 运行:直接…...
Aleo项目详细介绍-一个兼顾隐私和可编程性的隐私公链
Aleo上线在即,整理一篇项目的详细介绍,喜欢的收藏。有计划做aleo节点的可交流。 一、项目简介 Aleo 最初是在 2016 年构思的,旨在研究可编程零知识。公司由 Howard Wu、Michael Beller、Collin Chin 和 Raymond Chu 于 2019 年正式成立。 …...
qt学习:实战 http请求获取qq的吉凶
目录 利用的api是 聚合数据 的qq号码测吉凶 编程步骤 配置ui界面 添加头文件,定义网络管理者和http响应槽函数 在界面的构造函数里创建管理者对象,关联http响应槽函数 实现按钮点击事件 实现槽函数 效果 利用的api是 聚合数据 的qq号码测吉凶 先…...
【NodeJS JS】动态加载字体的各方式及注意事项;
首先加载字体这个需求基本只存在于非系统字体,系统已有字体不需要加载即可直接使用; 方案1:创建 style 标签,写入 font-face{font-family: xxx;src: url(xxx)} 等相关字体样式;将style标签添加到body里;方…...
每次请求sessionid变化【SpringBoot+Vue】
引言:花了一晚上的时间,终于把问题解决了,一开始后端做完后,用apifox所有接口测试都是可以的,但当前端跑起来后发现接收不到后端的数据。 当我写完前后端,主页面和获取当前页面信息接口后,配置了cros注解 CrossOrigin…...
勤学苦练“prompts“,如沐春风“CodeArts Snap“
前言 CodeArts Snap 上手一段时间了,对编程很有帮助。但是,感觉代码编写的不尽人意。 我因此也感到困惑,想要一份完整的 CodeArts Snap 手册看看。 就在我感觉仿佛"独自彷徨在这条悠长、悠长又寂寥的雨巷"时,我听了大…...
springboot(ssm线上医院挂号系统 在线挂号预约系统Java系统
springboot(ssm线上医院挂号系统 在线挂号预约系统Java系统 开发语言:Java 框架:springboot(可改ssm) vue JDK版本:JDK1.8(或11) 服务器:tomcat 数据库:mysql 5.7&a…...
万界星空科技可视化数据大屏的作用
随着科技的不断发展和进步,当前各种数据化的设备也是如同雨后春笋般冒了出来,并且其可以说是给我们带来了极大的便利的。在这其中,数据大屏就是非常具有代表性的一个例子。 数据大屏的主要作用包括: 数据分析:数据大屏…...
网站建设中iis/交换友情链接推广法
逆滤波法在图像复原中的应用吴雪垠;吴谨;张鹤【期刊名称】《信息技术》【年(卷),期】2011(000)010【摘要】针对逆滤波图像复原算法进行研究,在已知系统退化模型的情况下,对退化图像使用逆滤波算法进行复原,再对复原后的图像进行平滑处理,使其更接近于原始图像.文中使用VisualC6…...
生活门户网站开发方案/网站建设规划要点详解
写在最前:只有A1/A2版的K2P才能照本文编译固件并刷入,B1/B2版切莫作死。一、简述写在最前,只有A1/A2版本的K2P能照本文编译固件并刷入,B1版本切莫作死。虽然斐讯迟早翻车 现在已经翻车了,不过K2P这款路由器依然声名在外。 CPU MT7…...
石家庄市住建局官网/seo搜索如何优化
一、准备工作 虚拟机软件 VMware-14;CentOS7_x64系统镜像;二、创建虚拟机 进入WMware主界面,选择“文件”->“新建虚拟机”选项;进入虚拟机安装向导,选择“自定义(高级)”;硬件兼容性,选择WMware当前所对应的版本&a…...
小贷网站需要多少钱可以做/技成培训网
Hive 有很多的基础数据类型,在实际构建数仓的这么多数据类型,我们该如何选择呢? 如果你的公司足够大,那么建议参照以下几条建议: 浮点数建议: 1) Hive 中Double类型需要慎用, Hive 中Double类型存在失真。 …...
杭州做网站制作/百度门店推广
function set(obj){ obj.name "cj"; obj {}; obj.name "aa" // 如果是按引用传递的话 结果会改成这个 } var obj {}; set(obj); alert(obj.name); 结果是cj ,函数的参数是局部变量 JavaScript 函数传递参数时,是值传递。虽然…...
平面设计师灵感网站/泰安网站建设
以windows平台为例。用pyinstaller打包你的策略成exe程序文件不需要在运行机器中重复安装各种依赖包,同时也避免策略的源码管理问题安装pyinstaller包在开发环境中,首先要安装pyinstaller包, gmsdkpip install pyinstaller# win32API,需要pip…...