Android集成三方浏览器之Crosswalk

article/2025/9/16 6:32:41

上一篇讲解了腾讯 X5 内核的集成,这一篇是讲解 Crosswalk 的集成 Crosswalk 也是采用了Chromenium 内核,是一款开源的 web 引擎,开发者可以直接把 Crosswalk 嵌入到应用之中,当然也支持共享模式(系统中没有对应的 Crosswalk 库是会提示下载)。只不过 Crosswalk 已经停止维护了。

Crosswalk官网

集成

想要使用 CrossWalk 有三种方式:

1.maven 远程依赖

//配置gradle repositories {maven {url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'}} 
compile 'org.xwalk:xwalk_core_library:23.53.589.4' 

2.下载 zip 包后解压,然后以用开发工具Import Module导入,作为一个library依赖。

推荐使用stable(稳定版)!其他的分别是beta(测试版),canary(金丝雀版)。下载最新版本的zip包:23.53.589.4

3.下载aar 下载aar包后导入项目的 lib目 录下,然后在gradle中添加

repositories {flatDir {dirs 'libs'}
} 
compile(name: 'crosswalk-23.53.589.4', ext: 'aar') 

使用

1.manifest中添加

android:hardwareAccelerated="true" //application节点下开启硬件加速 
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 

2.布局中添加

 <org.xwalk.core.XWalkViewandroid:id="@+id/xwalkview"android:layout_width="match_parent"android:layout_height="match_parent"></org.xwalk.core.XWalkView> 

3.新建 Activity 继承 XWalkActivityonXWalkReady() 方法里面进行初始化操作

class MainActivity : XWalkActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)}override fun onXWalkReady() {XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW, true); //开启默认动画var setting = xwalkview.settingssetting.loadWithOverviewMode = falsesetting.javaScriptEnabled = true//支持jssetting.javaScriptCanOpenWindowsAutomatically = true//支持通过JS打开新窗口setting.useWideViewPort = true//将图片调整到合适webview的大小setting.loadWithOverviewMode = true //缩放至屏幕的大小setting.loadsImagesAutomatically = true //支持自动加载图片setting.supportMultipleWindows()//支持多窗口setting.setSupportZoom(true)setting.allowFileAccess = truesetting.setDomStorageEnabled(true)setting.allowContentAccess = truesetting.allowContentAccess = truesetting.domStorageEnabled = truexwalkview.requestFocus()setting.cacheMode = WebSettings.LOAD_NO_CACHExwalkview.setResourceClient(object : XWalkResourceClient(xwalkview) {override fun onLoadStarted(view: XWalkView?, url: String?) {super.onLoadStarted(view, url)}override fun onLoadFinished(view: XWalkView?, url: String?) {super.onLoadFinished(view, url)}override fun shouldOverrideUrlLoading(view: XWalkView?, url: String?): Boolean {view?.loadUrl(url)return true}override fun onReceivedSslError(view: XWalkView?, callback: ValueCallback<Boolean>?, error: SslError?) {callback?.onReceiveValue(true)super.onReceivedSslError(view, callback, error)}override fun onReceivedLoadError(view: XWalkView?, errorCode: Int, description: String?, failingUrl: String?) {super.onReceivedLoadError(view, errorCode, description, failingUrl)}override fun onProgressChanged(view: XWalkView?, process: Int) {super.onProgressChanged(view, process)if (...) {...progressBar.setProgress(process)...} else {...}}})xwalkview.setUIClient(object :XWalkUIClient(xwalkview){override fun onJsAlert(view: XWalkView?, url: String?,  	message: String?, result: XWalkJavascriptResult?): Boolean {return super.onJsAlert(view, url, message, result)}override fun onReceivedTitle(view: XWalkView?, title: String?) {super.onReceivedTitle(view, title)}override fun openFileChooser(view: XWalkView?, uploadFile: ValueCallback<Uri>?, acceptType: String?, capture: String?) {super.openFileChooser(view, uploadFile, acceptType, capture)}})xwalkview.loadUrl("your url")} override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {if (xwalkview!=null){xwalkview.onActivityResult(requestCode, resultCode, data)}}override fun onNewIntent(intent: Intent?) {if (xwalkview != null) {xwalkview.onNewIntent(intent)}}override fun onDestroy() {super.onDestroy()XWalkPreferences.setValue(XWalkPreferences.ANIMATABLE_XWALK_VIEW, false);}
} 

XWalkUIClient 对应系统 webview 中的 WebChromeClient

XWalkResourceClient 对应系统 webviewWebViewClient

  • 监听页面生命
override fun onResume() {super.onResume()xwalkview?.let {xwalkview.pauseTimers()xwalkview.onHide()}
}
override fun onPause() {super.onPause()xwalkview?.let {xwalkview.pauseTimers()xwalkview.onHide()}
} 
  • 判断页面返回
if (xwalkview.navigationHistory.canGoBack()) {xwalkview.getNavigationHistory().navigate(XWalkNavigationHistory.Direction.BACKWARD, 1)
} else {finish()
} 

提示

在使用 Crosswalk 的过程遇到了几个问题,在这里提一下,希望能有一点帮助。

1.lang.RuntimeException: Crosswalk's APIs are not ready yet异常:请在onready里面进行相关设置和加载页面
2.使用第一种 maven 集成方式 可能会报资源异常

configurations.all {resolutionStrategy {force 'com.android.support:support-v4:27.1.0'//自己的版本号}
} 

3.Crosswalk 加载 SSL 证书有问题的网站时会报 Rquest was denied for security

override fun onReceivedSslError(view: XWalkView?, callback: ValueCallback<Boolean>?, error: SslError?) {callback?.onReceiveValue(true) //系统webview中的是handler.process()
} 

添加上述代码后会回调 onReceivedLoadError并报net:: ERR_SECURITY_RESPONSE。这个问题折腾了很久,在 xwalkview的论坛 中发现 Crosswalk 会阻止连接到不信任的 SSL

最后发现源码中的 SsLUtil.java 会阻止加载。

public static boolean shouldDenyRequest(int error)
{assert error >= -215 && error <= -200;switch (error){case -213:case -212:case -211:case -208:case -207:case -206:case -203: //	case -202: case -201: //	case -200: 	case -150:case -129: return true;}return false;
} 

修改后的资源已忽略证书安全问题「不建议忽略证书安全问题,我是测试环境所需」

参考文档:

Crosswalk官网

Crosswalk Api 文档

Crosswalk 项目

官方论坛

最后

关于腾讯 X5 内核集成请跳转:

Android集成三方浏览器之X5内核


http://chatgpt.dhexx.cn/article/dp5ELutv.shtml

相关文章

CROSSWALK入门

Crosswalk是一款开源的web引擎。目前Crosswalk正式支持的移动操作系统包括Android和Tizen&#xff0c;在Android 4.0及以上的系统中使用Crosswalk的Web应用程序在HTML5方面可以有一致的体验&#xff0c;同时和系统的整合交互方面&#xff08;比如启动画面、权限管理、应用切换、…

Java和大数据的关系如何?

非常多的人&#xff0c;尤其是没有研究过&#xff0c;没有关注过这块知识的人都容易误解Java 和大数据的概念&#xff0c;甚至有些人认为大数据就是用java写的。 一&#xff1a;两者关系 java是计算机的一门编程语言&#xff1b;可以用来做很多工作&#xff0c;大数据开发属于…

java,大数据,

辅导&#xff0c;环境安装

Java?还是大数据?

IT 行业的人可能听过“ Java 大数据开发”这个名词&#xff0c;其实这并不是一个新岗位&#xff0c;而是因为大数据开发的编程语言以 Java 为主&#xff0c;掌握 Java 是进行大数据开发的基础&#xff0c;这才形成了“ Java 大数据开发”的说法。 随着 Java 开发岗人才供应趋于…

大数据开发-Java入门1

目录 1、计算机语言发展史1.1 计算机语言&#xff1a;1.2 常用的DOS命令&#xff1a; 2、java介绍与安装3、Java程序初体验3.1 Java开发三步走3.2 常见错误3.3 代码解释3.4 源文件名和类型 1、计算机语言发展史 1.1 计算机语言&#xff1a; 第一代&#xff1a;机器语言第二代…

JAVA 大数据方向 - 知识体系概况

JAVA 大数据方向 - 知识体系概况 想学后端&#xff0c;面临选方向&#xff0c;补充一下

学习Java大数据需要掌握哪些Java技能?

学习Java大数据需要掌握哪些Java技能&#xff1f;现在大数据发展很速度很多小伙伴想要学习Java大数据技术开发&#xff0c;但是学习大数据为什么需要掌握Java技能呢&#xff1f; 一、学大数据为什么要掌握Java&#xff1f; 首先&#xff0c;我们学习大数据&#xff0c;为什么要…

Java——处理大数据 BigInteger

整型 int型表示范围是&#xff1a;-(2的31次方) ~ (2的31次方) - 1 long型表示范围是&#xff1a;-(2的64次方) ~(2的64次方) - 1 浮点型 float和double是表示浮点型的数据类型&#xff0c;他们之间的区别在于他们的精确度不同float 3.402823e38 ~ 1.401298e-45&#xff08;e…

大数据必学Java基础(一百一十七):三个案例开发

文章目录 三个案例开发 一、记录请求日志 二、统计实时在线人数 三、项目重启免登录

大数据开发 - Java入门2

目录 Java基础知识注释关键字常量标识符测试题回顾 Java基础知识 注释 对程序的解释说明 分类&#xff1a; 单行注释&#xff1a;// 对本行后面的内容进行注释多行注释&#xff1a;/*解释内容 */文档注释 &#xff1a;/** 注释内容*/ --用于产生帮助文档&#xff0c;也有多行…

Java和大数据有什么联系?

提到Java&#xff0c;我们经常将它和大数据联系在一起。Java是一门面向对象编程语言&#xff0c;大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是一个概念性的东西。那么&#xff0c;Java和大数据有什么关系呢? 简单的说Java语言是…

java到大数据学习路线

计算机网络 操作系统 数据结构 计算机组成原理 可重点学习如下知识点 计算机网络&#xff08;重点看 OSI七层模型 或 TCP/IP五层模型 理解每层含义&#xff09;数据结构&#xff08;重点看 数组、栈、队列、链表、树&#xff09;算法&#xff08;重点看 各种 排序算法、查…

Java大数据文件处理方法

前言 Java大数据文件处理是一种使用Java编写的大型数据处理技术&#xff0c;特别适用于处理大型数据文件。在这篇文章中&#xff0c;我们将了解什么是Java大数据文件处理&#xff0c;为什么它很重要以及Java大数据文件处理的方法和技术。 一、什么是Java大数据文件处理&#…

大数据必学Java基础(一):Java体系结构、特性和优势

文章目录 Java体系结构、特性和优势 一、JAVA简史 【1】SUN公司 【2】Java为什么被发明

如果通过Java来完成大数据开发,需要学习哪些内容

首先&#xff0c;当前大数据领域的开发岗位确实比较多&#xff0c;近两年有不少大数据方向的研究生也会从事大数据开发岗位&#xff0c;而Java语言则是大数据开发人员的常用工具&#xff0c;所以如果要从事大数据开发岗位&#xff0c;可以重点学习一下Java语言。 大数据开发有…

Java大数据开发做什么?Java大数据开发成长路线

Java开发是IT行业的经典岗位&#xff0c;行业当中存在普遍的需求&#xff0c;Web开发、Android开发、游戏开发等岗位&#xff0c;基本上Java语言是主力队伍。而进入大数据时代&#xff0c;Java又在大数据方向上有了用武之地。今天我们主要来讲讲Java大数据开发做什么&#xff0…

23个java大数据处理框架

本文转自&#xff1a;https://www.cnblogs.com/stm32stm32/p/6413557.html 目前&#xff0c;编程人员面对的最大挑战就是复杂性&#xff0c;硬件越来越复杂&#xff0c;OS越来越复杂&#xff0c;编程语言和API越来越复杂&#xff0c;我们构建的应用也越来越复杂。根据外媒的一…

大数据开发要学Java框架吗?

大数据开发要学Java框架吗&#xff1f;学习大数据要去学习Java而且还要精通&#xff0c;不仅要掌握Java基础知识还要掌握一些核心的Java架构。从java基础开始,学习大数据开发过程中必备的离线数据分析、实时数据分析和内存数据计算等&#xff0c;掌握大数据体系中几乎所有的核心…

java 大数据以及Hadoop相关概念介绍

一、大数据的基本概念 1.1、什么是大数据 大数据指的就是要处理的数据是TB级别以上的数据。大数据是以TB级别起步的。在计算机当中&#xff0c;存放到硬盘上面的文件都会占用一定的存储空间&#xff0c;例如&#xff1a; 文件占用的存储空间代表的就是该文件的大小&#xff0…

JAVA开发搞了一年多大数据的总结

2021年7月份加入了当前项目组&#xff0c;以一个原汁原味的Java开发工程师的身份进来的&#xff0c;来了没多久&#xff0c;项目组唯一一名大数据开发工程师要离职了&#xff0c;一时间一大堆的数据需求急需人来接手&#xff0c;此刻又招不来新的数据开发。没辙&#xff0c;我和…