想要使用 CrossWalk
有三种方式:
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
继承 XWalkActivity
,onXWalkReady()
方法里面进行初始化操作
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.javaScriptEnabled = 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
对应系统 webview 的 WebViewClient
- 监听页面生命
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
的过程遇到了几个问题,在这里提一下,希望能有一点帮助。
lang.RuntimeException: Crosswalk's APIs are not ready yet
异常:请在onready里面进行相关设置和加载页面- 使用第一种
maven
集成方式 可能会报资源异常
在你的 build.gradle
中添加:
configurations.all {
resolutionStrategy {
force ‘com.android.support:support-v4:27.1.0’//自己的版本号
}
}
3.Crosswalk
加载 SSL
证书有问题的网站时会报 Rquest was denied for security
97636)]
在你的 build.gradle
中添加:
configurations.all {
resolutionStrategy {
force ‘com.android.support:support-v4:27.1.0’//自己的版本号
}
}
3.Crosswalk
加载 SSL
证书有问题的网站时会报 Rquest was denied for security