使用XWalkView 替换 WebView控件

来源:互联网 发布:java list 转数组 编辑:程序博客网 时间:2024/06/08 15:01

问题背景

系统签名app(android:sharedUserId="android.uid.system")运行webview(Android 5.0+)会出现闪退问题

问题分析

SharedUserid,是指拥有同一个Userid的多个APK可以配置成运行在同一个进程中,从而实现各APK的资源共享。但是使用这句话之后也就导致安全性能的问题。因为webview允许运行js,如果用户通过js注入安全代码,那么js就可以肆无忌惮的使用系统权限,这无疑是一个漏洞,可谓门户大开,所以在Android 5.0以后,若还要使用SharedUserid签名,就不能在使用webview控件了。

使用XWalkView 替换 WebView控件,步骤:

1.下载zip包,解压后导入。下载地址

2.关联此Library。如何在as中添加aar包

3.在清单文件中写入下列权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

4.layout文件写法,和其他自定义控件一样。

<org.xwalk.core.XWalkView        android:id="@+id/xwalkWebView"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical" />

5.使用XWalkView 加载页面

// urlmXWalkView.load("http://crosswalk-project.org/", null);// this loads a file from the assets/ directorymXWalkView.load("file:///android_asset/index.html", null);

6.在Webview中有WebViewClient,那XWalkView呢?

mXWalkView.setResourceClient(new XWalkResourceClient(mXWalkView){    @Override    public void onLoadFinished(XWalkView view, String url) {        super.onLoadFinished(view, url);    }    @Override    public void onLoadStarted(XWalkView view, String url) {        super.onLoadStarted(view, url);    }});

7.调用JavaScript

不像WebView一样获取setting设置setJavaScriptEnabled为true才能执行。Crosswalk可以直接执行js。当然,按照Kitkat引入的方式,使用evaluateJavascript方法也是可以的。(大神们推荐)
mXWalkView.load("javascript:document.body.contentEditable=true;", null);


好,到目前为止XWalkView 的基本使用也就介绍完了。希望对你有帮助。