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

Crosswalk官网

集成

想要使用 CrossWalk 有三种方式:

  1. maven 远程依赖
//配置gradlerepositories {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 集成方式 可能会报资源异常 在你的 build.gradle 中添加:
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内核

转载于:https://juejin.im/post/5b4ef7a56fb9a04fc5649dff

Android集成三方浏览器之Crosswalk相关推荐

  1. Android集成三方浏览器之X5内核,讲的明明白白

    腾讯 X5 内核也是基于 chromium 的,相比原生的 WebView 而言,优化了用户的浏览体验.SDK 是通过共享使用用户手机上微信.手机QQ.QQ空间等软件已经下载好的 X5 内核.SDK ...

  2. [转]Android 和 iPhone 浏览器之战,第 2 部分: 为 iPhone 和 Android 构建基于浏览器的应用程序...

    简介: 本文是共两部分的系列文章 "Android 和 iPhone 浏览器之战" 的第 2 部分,主要关注为 iPhone 和 Android 开发基于浏览器的应用程序.在第 1 ...

  3. Android 集成Chrome 浏览器内核 Crosswalk

    Crosswalk 内核的兴起与消亡 Android 4.4 版本之前,使用的是基于 androidWebKit 的 WebView 但实际上,由于 Android 的碎片化问题(大量存在不同的 An ...

  4. 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. Google 与微软的浏览器之争

    浏览器再现"神仙打架". 整理 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 从 IE 到 Chrome,再从 Chrome 到 E ...

  6. android 三方_面试官送你一份Android热门三方库源码面试宝典及学习笔记

    前言 众所周知,优秀源码的阅读与理解是最能提升自身功力的途径,如果想要成为一名优秀的Android工程师,那么Android中优秀三方库源码的分析和理解则是必备技能.就拿比较热门的图片加载框架Glid ...

  7. Netscape与IE的浏览器之争

    Netscape与IE的浏览器之争 1992年,在伊利诺斯州大学里,一个20岁出头.尚未毕业的计算机科学专业的大学生,每天除了上课,就是在NCSA(美国的国家超级计算中心)工 作.这天,一群同年龄的大 ...

  8. 网景如何才能打败微软而赢得浏览器之战?

    网景如何才能打败微软而赢得浏览器之战? 内容提要:比尔盖茨在<未来之路>中介绍了他是如何通过正反馈理论打败所有竞争对手,使微软系统成为行业标准的.微软依仗其在操作系统中的统治地位,它可以通 ...

  9. Android集成MuPDF,修改批注默认红色墨迹为黑色墨迹

    概述 前段时间由于项目需要,要在手机上对PDF文件进行预览.签名.上传等操作,经过各种分析.调研及测试,最终决定用mupdf.(好像目前能对pdf文档支持搜索,标注等功能,也只有mupdf可以实现) ...

最新文章

  1. EXP1 PC平台逆向破解
  2. vnctf——babyvm
  3. java web的运行方式_在运行 Javaweb项目时报错,不知道什么原因,百度了好多方法跟着人家的方法做了还是报错...
  4. mnesia数据库学习笔记四
  5. 方立勋_30天掌握JavaWeb_使用httpUrlConnection模似ie
  6. (3.5)HarmonyOS鸿蒙多按钮点击事件
  7. Spire.Pdf 的各种操作总结
  8. 使用Newtonsoft.Json接受部分资源
  9. Linux修改history存储的最大记录数
  10. AI 修复 100 年前晚清影像喜提热搜,有穿越内味儿了!
  11. 步入restful之前先了解一下localStorage
  12. springboot GeoLite2-City.mmdb实现通过IP地址获取经纬度以及该IP的所属地区
  13. Java等额本息算法实现
  14. 教你用arduino控制LCD1602液晶屏的底层程序实现(全网最笨的方法)
  15. pygame精灵组有哪些方法_pygame 的精灵使用
  16. DbVisualizer 8.0.11 出现乱码问题
  17. 机械臂控制软件,上位机软件 此机器人上位软件。 运动采用通用G代码指令编程,具有G5三维的空间圆弧插补,空间直线插补功能
  18. 二硫化钼量子点修饰纳米金棒/CdS纳米棒|二硫化钼量子点/g-C3N4复合光催化剂|马来酰亚胺修饰二硫化钼MoS2-MAL
  19. 线性代数笔记(线性方程组、线性空间,线性变换)
  20. 【东游记】美东大环线:华盛顿--费城--纽约--西点--耶鲁--波士顿--美加大瀑布

热门文章

  1. 魅族 虚拟位置服务状态:未运行_魅族17评测:「重量平衡设计」 手感出色 魅友们的5G梦想旗舰...
  2. Java和C/C++程序实时通讯数据移植问题的研究
  3. GHOST装双系统图文教程
  4. Windows下安装苹果iPhone开发环境xcode图文教程
  5. windows gtk+ 开发环境搭建
  6. java卡片布局例子_Java编程使用卡片布局管理器示例【基于swing组件】
  7. eslint 保存自动格式化_ESLint一款可组装的JavaScript和JSX检查工具
  8. c语言获取按键,c语言获得键盘的按键
  9. adcclk最大_TMS320F28xxADC配置说明中文版
  10. mysql select查询语句_mysql的select查询语句