Android集成三方浏览器之Crosswalk

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上一篇讲解了腾讯 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节点下开启硬件加速

2.布局中添加

<org.xwalk.core.XWalkView
android: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.settings
setting.loadWithOverviewMode = false
setting.javaScriptEnab
led = true //支持js
setting.javaScriptCanOpenWindowsAutomatically = true //支持通过JS打开新窗口
setting.useWideViewPort = true //将图片调整到合适webview的大小
setting.loadWithOverviewMode = true //缩放至屏幕的大小
setting.loadsImagesAutomatically = true //支持自动加载图片
setting.supportMultipleWindows() //支持多窗口
setting.setSupportZoom(true)
setting.allowFileAccess = true
setting.setDomStorageEnabled(true)
setting.allowContentAccess = true
setting.allowContentAccess = true
setting.domStorageEnabled = true
xwalkview.requestFocus()
setting.cacheMode = WebSettings.LOAD_NO_CACHE
xwalkview.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?, 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?, 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 {

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如果你需要这些资料, ⬅ 专栏获取

[外链图片转存中…(img-GwLQbZc5-1719180424944)]

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

如果你需要这些资料, ⬅ 专栏获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值