本篇分为三部分:

  1. 介绍Crosswalk背景

  2. 介绍Crosswalk集成步骤

  3. 为了减小体积,仅集成兼容ARM的Crosswalk(针对X86同理)

PART_A Crosswalk背景介绍

Web技术的优势可想而知.

  1. 当下app开发模式偏向Android/IOS原生壳+Web. 浏览器内核性能至关重要
  2. 这样开发的优势很明显,当出现bug或者app要升级时不需要用户下载安装包,而是在服务器后台维护即可,极大的增强了开发的灵活性和用户粘性
  • Crosswalk的优势

    1. 采用Chromium内核并持续更新维护,使基于Crosswalk的Web应用充分享有Chromium的功能与性能优势,以及较好的平台一致性. 同时,支持最新的H5的API(WebGL,WebAudio,WebRTC,Gamepad,WebSocket,Presentation等)。并且在低端Android设备上也能流畅运行

    2. 支持通过编写原生的Java代码来创建新的Web API

    3. 支持与Cordova的整合(已有大量的成熟的API实现供开发者使用)

    4. 允许Web开发者将他们的应用打包成系统的应用安装包,获得与本地应用一致的体验. 同时也支持多个应用同时使用一个Crosswalk库的共享模式,仅当应用第一次启动并且发现系统还没有相应的Crosswalk库时才提示用户下载安装. 目前是大多数情况下开发者将Crosswalk直接嵌入到应用本身。在这种嵌入模式下Web应用开发者可以完全控制Crosswalk的更新

  • 与WebView的区别

    • 系统自带的WebView组件在H5的解析能力上相比Safari for iOS、Chrome for Android都要差很多. 另外在Android平台上,由于系统碎片化比较严重,不同Android版本的WebView的H5解析能力也有较大差异,导致相应的HTML5应用一致性难以保证. 作为第三方的独立引擎Crosswalk有较好的H5性、功能支持,较好的平台一致性,以及近似原生应用的系统整合体验. 另外Crosswalk提供了共享模式来减少应用的大小
  • 补充

    • WebView自Android 4.4起已经采用了Chromium内核,但这与Crosswalk比起来目前仍存在两大缺陷:1.不被4.4之前的Android支持;2.性、功能(性能和功能)与Crosswalk有较大差别
  • Crosswalk与Cordova

    • Cordova(PhoneGap)作为第三方的H5应用开发框架工具的代表,极大促进了H5应用的发展. 提供了方便的跨平台应用打包/发布服务、实用的API、灵活的扩展机制、以及积累下来的丰富的第三方API实现. 然而Cordova使用的web引擎是系统的WebView. 如果开发者正在使用Cordova并且渴望更好的性能和更新的功能,如WebGL,那么Crosswalk是一个很好的选择! Crosswalk支持开发者在Cordova中用Crosswalk替换原生的WebView,并将两者完美的融合. 当然,它也支持Crodova的扩展机制. 目前Crosswalk采用提供定制过的Cordova开发包来支持Cordova中Crosswalk引擎的使用

PART_B Crosswalk集成步骤

  • 新建项目

    Minimum SDK 选择 "API 19"

  • 配置gradle

    repositories {
    maven {
    url 'https://download.01.org/crosswalk/releases/crosswalk/android/maven2'
    }
    }
  • compile 'org.xwalk:xwalk_core_library:10.39.235.15'
  • 配置结果参考下图

  • 配置权限

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    • 1
    • 2
    • 3
  • 在application标签中声明开启硬件加速

    android:hardwareAccelerated="true"

  • 布局文件

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical"> <org.xwalk.core.XWalkView
    android:id="@+id/xWalkWebView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical" /> </LinearLayout>
  • Activity中

      • 需要监听系统事件(生命周期、Intent、ActivityResult)

      • 必须显示调用 onDestroy(),防止浏览器引擎的内存泄漏

        public class MainActivity extends Activity {
        
            @Bind(R.id.xWalkWebView) XWalkView xWalkWebView;
        
            @Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this); xWalkWebView.load("http://sina.com.cn", null); // 开启调试
        XWalkPreferences.setValue(XWalkPreferences.REMOTE_DEBUGGING, true);
        } /**通过Activity管理XWalkWebView的声明周期*/
        @Override protected void onPause() {
        super.onPause();
        if (xWalkWebView != null) {
        xWalkWebView.pauseTimers();
        xWalkWebView.onHide();
        }
        } @Override protected void onResume() {
        super.onResume();
        if (xWalkWebView != null) {
        xWalkWebView.resumeTimers();
        xWalkWebView.onShow();
        }
        } @Override protected void onDestroy() {
        super.onDestroy();
        if (xWalkWebView != null) {
        xWalkWebView.onDestroy();
        }
        } @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (xwv != null) {
        xwv.onActivityResult(requestCode, resultCode, data);
        }
        } @Override protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (xwv != null) {
        xwv.onNewIntent(intent);
        }
        }
        }

PART_C 兼容ARM的Crosswalk集成简要

  1. 先看官方Crosswalk的各个版本

  2. 点进当前最新版本

    可以看到完整包39m,arm包20m. 我们在此选择第一个arm包

  3. 将下载好的arm.aar包放入工程的libs目录下

  4. 在builde.gradle中添加配置

    flatDir {
    dirs 'libs'
    }
    • 1
    • 2
    • 3
    compile 'org.xwalk:xwalk_core_library:15.44.384.13-arm@aar'
    • 1

    配置结果参考下图

  5. 重新编译打包,可见结果如下(集成完整Crosswalk与仅集成ARM包)

第三部分小结

  • 1.众所周知,Crosswalk的体积是个恼人的问题. 可以针对针对ARM、X86分别引入对应的库文件,减少不必要的空间浪费

  • 2.可以使用动态库加载

转载http://blog.csdn.net/itcatface/article/details/49799337

第三方浏览器内核嵌入一、Crosswalk的更多相关文章

  1. 浏览器内核与js引擎

    摘要: 面试一个大公司的时候问到了一个问题,让我谈谈主要的浏览器内核以及他们的特点,当时并没有详细的回答,回来之后自己在网上找了找资料,总结了下分享给大家. 简介: 在维基百科上是这样介绍浏览器内核的 ...

  2. 浏览器内核-Webkit

    关键字:浏览器内核,浏览器引擎,Browser,Webkit,Blink,Chromium. 本文简单介绍一下各种浏览器内核.着种介绍一下Webkit.顾名思义,浏览器内核就是浏览器的核心部分,也可以 ...

  3. webkit、cef、nwjs、electron、 miniblink浏览器内核优缺点

    市面上作为嵌入的组件的可用的浏览器内核,不外乎这几个:webkit.cef.nwjs.electron. 1.cef:优点是由于集成的chromium内核,所以对H5支持的很全,同时因为使用的人也多, ...

  4. 关于浏览器内核与javascript引擎的一些小知识

    浏览器是我们每天几乎都必须使用的软件产品,可是对于自己每天都接触的浏览器,很多同学其实对其一无所知.今天异次元就跟大家说说关于浏览器内核的一些事儿吧,好让你了解多一点稍微内在的东西. 在下面的文章中主 ...

  5. 临近年关,修复ASPNETCore因浏览器内核版本引发的单点登陆故障

    临近年关,咨询师提出360,搜狗急速浏览器无法单点登陆到公司核心产品WD, 报重定向过多. 现象 经过测试, 出现单点登陆故障的是搜狗,360等主打双核(默认Chrome内核)的浏览器, 较新式的Ed ...

  6. 【repost】浏览器内核、渲染引擎、js引擎

    [1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具[2]常见引擎 渲染引擎: firef ...

  7. 几大主流浏览器内核(Rendering Engine)

    "浏览器内核",英文为"Rendering Engine",也叫"渲染引擎",作用是帮助浏览器来渲染网页的内容,将页面内容和排版代码转换为用 ...

  8. 各大浏览器内核介绍(Rendering Engine)

    在介绍各大浏览器的内核之前,我们先来了解一下什么是浏览器内核. 所谓浏览器内核就是指浏览器最重要或者说核心的部分"Rendering Engine",译为"渲染引擎&qu ...

  9. 各大浏览器内核特性及对应的Browserhacks举例

    1.浏览器内核指的是什么? 简化的浏览器=用户界面+渲染引擎+js解析引擎+数据存储+网络部件 而通常所说的浏览器内核指的是页面渲染引擎(rendering engine). 2.渲染引擎 The r ...

随机推荐

  1. 【二分查找+优化O(n)】【续UVA1121】Subsequence

    之前的二分答案做法 http://blog.csdn.net/zy691357966/article/details/40212215 二分查找做法: 我们首先试试只枚举终点.对于终点j,我们的目标是 ...

  2. js/css 检测移动设备方向的变化 判断横竖屏幕

    js/css 检测移动设备方向的变化 判断横竖屏幕 方法一:用触发手机的横屏和竖屏之间的切换的事件 window.addEventListener("orientationchange&qu ...

  3. HDU 1057 - A New Growth Industry

    简单的模拟. 给定天数n,给定D[0]~D[15]给定一个20*20的矩阵.每个格子内有一个0~3的数字,表示细菌数.每天,每个格子将加上D[k],k表示这个格子以及上下左右相邻格子的细菌之和(矩阵外 ...

  4. Linux操作系统报:read-only file system

    在对集群测试过程中发现系统中某一节点中的磁盘变成read-only file system,从而导致测试任务出错,从网上查找资料,找到以下解决方案: 这个报错的意思是硬盘属性变成只读,不可写入: VO ...

  5. 日志管理-NLog日志框架简写用法

    本文转载:http://www.blogjava.net/qiyadeng/archive/2013/02/27/395799.html 在.net中也有非常多的日志工具,今天介绍下NLog.NLog ...

  6. [转]printf 字符串格式化

    在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于sprintf 跟printf 在用法上几乎一样,只是打印的目的地不同而已,前者打印到字符串中,后者则直接在命令行上输出 ...

  7. AlertDialog与DialogFragment

    1.AlertDialog 作用:简单的弹出框实现 创建方法: AlertDialog alert = new AlertDialog.Builder(); 使用: new AlertDialog.B ...

  8. bzoj 1188 : [HNOI2007]分裂游戏 sg函数

    题目链接 给n个位置, 每个位置有一个小球. 现在两个人进行操作, 每次操作可以选择一个位置i, 拿走一个小球.然后在位置j, k(i<j<=k)处放置一个小球. 问你先进行什么操作会先手 ...

  9. 正式学习React(一) 开始学习之前必读

    为什么要加这个必读!因为webpack本身是基于node环境的, 里面会涉及很多路径问题,我们可能对paths怎么写!webpack又是怎么找到这些paths的很迷惑. 本文是我已经写完正式学习Rea ...

  10. Nginx 配置指令的执行顺序(五)

    Nginx 的 content 阶段是所有请求处理阶段中最为重要的一个,因为运行在这个阶段的配置指令一般都肩负着生成“内容”(content)并输出 HTTP 响应的使命.正因为其重要性,这个阶段的配 ...