logo资料库

KitKat研究报告.pdf

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
Kitkat chromium_org 研究报告
第一时间看到了kitkat 的code,并对自己熟悉的browser 模块 进行了分析。惊奇的发现Browser 模块的改动是非常巨大的,在kit kat 的code 中,已经实现了使用android chromium 来驱动android webview 的功能。 这个改动是可以预见的,google 在去年已经在ch romium 的项目中启动了这个研究,本以为会在一两年后才会出现, 没想到会这么快就已经实现。 由于现在的android 平台是用chromium 来驱动webview,所以 单纯从理论上面来讲,一个app 的developer 完全可以使用webview 组件来做出和 chrome 渲染效果相同,加载速度一致的浏览器。这也 可以预见到以后的android 平台上面会出现很多定制的浏览器。而随 着html5 的越来越成熟,也会有更多的app 使用webview + html5 来 进行实现。 由于对android chromium 也有一定的研究,所以对比android4. 3 的代码,分析了4.4 browser 模块的部分改动,并生成此文。
概述 熟悉Android 系统和HTML编程的人可能都听说过Android 提供的 一个重要类android.webkit.WebView,它继承于View 类,这是它同 其它很多控件的相似之处。不同之处在于,它能够用来渲染网页。当 前,WebView 的实现是基于现有的缺省WebKit 内核(Android 缺省浏 览器是基于 WebView 构建),它不同于 chromium 所使用的 WebKit 内 核,虽然它们都叫WebKit。 目前,它被广泛的用在众多的 Android 应用程序中,通常我们称 之为混合应用程序(Hybridapplications,意思是结合了 HTML5 和传 统的应用程序特征)。遗憾的是,它对 HTML5 的支持很差,而且也没 有新的功能被加入进来,同时,Chromium 的 Android 版正在积极向 前发展,更多的针对该平台的HTML5 能力和优化逐步被实现和采用. 而现在使用chrome 来驱动webview 的主要思路是:其核心思想保 持WebView 的API 兼容性,也就是说只是将内部的实现从当前缺省W ebKit内核变了Chromium的内核,但是原有的WebViewAPI保持不变, 这样对于WebView 的用户来说,不需要做任何改变,便可以使用上功 能更多性能更好的渲染内核了。 由于这个模块也是基于chromium 的开源项目,所以如果同步下来 chromium for android 的源码,就可以在chromium 的源码中通过编 译android_webview_apk 来尝试新功能。 当然,本文主要还是基于android 源码来进行分析。
一. 目录结构的改变 在android4.3 及其以前的版本上,Browser 模块的主要结构为: Extern/skia Package/app/Browser Frameworks/webkit Extern/webkit Extern/chromium Extern/v8 ………. 从结构图中可以看到,browser 模块主要包括 Browser app, fra mework/webkit,extern/webkit 以及其它的一些第三方库组成了其 架构。总体结构还是很简单明了的。 需要注意的是,这边的extern/chromium 仅仅是编译成了libchr omium_net.so,负责浏览器网络模块的实现。
在kitkat 中,Browser 模块的主要结构为: Package/app/Browser Framework/webkit Framework/webview Extern/chromium_org Chromium_org 中也提供了和 framework/webview 相对应的接口。 具体目录为:external/chromium_org/android_webview 在chromium_org 下面的部分结构为: Chromium_org/android_webview Chromium_org/Content Chromium_org/Components Chromium_org/third_party/Webkit
仅由目录结构可以看出,从Browser 到传统意义上的webkit,变 化就是非常巨大的。多了好几层的封装,而这似乎也是不可避免的。 毕竟从chromium 到framework 的过渡并不是那么简单。
二. Chromium_org 的结构 1. Content 模块的结构和作用 Chromium_org/Content Chromium_org/net Chromium_org/webkit Base Chromium_org/thinrparty/Webkit Chromium_org/v8 Chromium_org/skia 这张图主要为了讲述content 模块的作用。忽略掉最上层的chrom e UI 部分,Content 模块就是串联chrome UI 部分和引擎部分的桥梁。 2. Chromium_org webkit 在kitkat 的代码中,经过分析,抛弃了原来所使用的Webkit,而 是使用了 google 自己主导的浏览器引擎 blink。但是因为 blink 是 由 webkit 衍变过来的,所以这边的目录结构仍然为 webkit。不过, 这边一定要注意的是此webkit 非彼webkit 了已经。 3. 具体目录结构说明: android_webview: 提供了chromium_org 和framework 的接口。
base: 基础库类。主要包含了进程,线程,消息循环的统一封装, 字符串处理,C++对象生命周期管理,json 解析,路径服务,日期时 间,日志框架等内容。 build: 编译脚本等内容 content:与浏览器页面显示相关的部分。连接android_webview 和 webkit,skia 等chromium 内部模块的接口。 gpu: gpu 加速模块 ipc:进程通信基础设施库,多使用有名管道,共享内存等方式来进 行进程间的通信。 media:多媒体音频和视频解码的相关模块。 net:网络模块。 ppapi:是一个浏览器的插件模块,暂时不知道在android 平台上面 的具体使用方法。 sandbox:google chromium 的沙盒技术安全模块。主要原理是在浏 览网络的时候,虚拟一块内存,将web 插件对本地系统的调用放在这 一块内存中进行,如果发现了非法调用,则回收这块内存。 skia:2D 图形库 sync:主要负责浏览器的数据同步 yhird_party:chromium 使用的第三方库,webkit(blink)就在其中 v8:javascript 引擎,主要负责javascript 的解析 Webkit: 对thirdparty/webkit 的一层封装。
分享到:
收藏