理解WebKit和Chromium: Chromium for Android
转载请注明出处:http://blog.csdn.net/milado_nju/
# Chromium的Android版
## 概述
在前面的Chromium的移动版章节中,我们对Chromium的Android版作过简单介绍,本章则进一步阐述其中的细节。
2012年,Google发布了第一版的ChromeFor Android。该产品受到了巨大的关注,但是同桌面版的Chrome浏览器不同地是,它的源代码并没有被开源出来,而且也不是跟随最新的Chromium Trunk代码,而是基于很早一个chromium稳定版-18。
在刚开始的时候,Google每隔一段时间会放出一个压缩包,里面包含Chrome For Android所有的C++代码,而Java相关的代码则没有放出来(其实放出了一部分代码,但是UI部分则没有),因而你没有办法编译出来一个类似桌面版Chromium的浏览器。不过,你可以利用Google释放发出的代码来编译一个C++动态库(情况有些变换,现在你可以使用最新trunk上面的代码来编译一个这样的库了),来替换发布的APK包中相应的动态库,这样你就能生成一个自己定制的浏览器APK。如果你不是很在乎UI层和浏览器的丰富功能,还有一种方法可以让你编译一个简单的浏览器,那就是利用chromium代码直接编译出两个APK -Content Shell和Test Shell,它们界面非常简单,但是它们都可以渲染网页并拥有基本上所有Chrome For Android的HTML5功能。
听起来令人迷惑,不是吗?好了,让我们通过下面的图来理解它们吧。
上图的层次结构非常清楚。从图中可以看出,它们都是基于Content模块/Content API/ContentView,而这是渲染网页和支持HTML5功能的核心,所以很大程度上来讲,在HTML5的支持上,它们不仅很类似,而且代码都是相同的,因而分析Content Shell或者Test Shell可以帮助你理解Chrome for Android的网页渲染和HTML5功能。
在上图的最上面一层,除了Browser是看不到它的代码以外,其它的你都可以在chromium的开源社区中找到它们的源代码并可以尝试编译它们。至于如何编译它们,请见参考文献1,支持编译Android的ARM版和IA版。
## Content Shell 和TestShell
这两者都是在content模块上构建的简单浏览器,怎么个简单法呢,简单到界面就是一个URL输入框附加一个页面显示框,功能就是显示个网页,至于其它功能,抱歉,它们基本上都没有提供,而且这也不是它们的目标。
从界面上来看,目前两者没有什么区别,但就其目的和功能上来说,我的理解它们还是很不一样的:
Content Shell是直接在content模块之上的,其主要目的是测试content API/ContentView等模块的正确性;
Test Shell虽然也依赖content模块,但是它还依赖于chrome浏览器的很多基础设施和组件(android平台的chrome内核),更像是测试它们的一个简单浏览器,因为chrome for android的UI部分不开源,所以Test Shell应该是最接近它的一个工具,可以帮助理解chrome for android的架构和内部原理。
## Android的WebView
使用Chromium的内核来实现Android的WebView机制,这个后面单独介绍。
## 同桌面版的不同之处
Chromium的Android版同传统的桌面版有很多不同的地方,具体包括以下几个方面:
首先是工作模式方面,Chromium的桌面版一直紧跟trunk,有着不同的发布渠道,包括dev,beta,stable等。而Android版则是基于某个稳定版在内部开发,然后不定期的释放出一些代码,其并没有同最新的Chromium同步(最近才开始保持同步)。
其次是开源方面,Chromium桌面版都是开源的,但是目前来看,Android版只是开源了部分,就是Content模块和以下,浏览器的一些功能模块,而UI部分则没有而且在可以预见的未来也不会开源。
再次是架构方面,首先是GPU进程变成为browser进程的一个线程,其次是线程化合成已经是Android版的一个默认功能。见下图所示,你可以跟“多进程模型”中的进程模型图进行对比一下。
然后是安全机制,对于Android平台来说,沙箱模型有些不一样。在Android4.1之后,引入了进程的isolated UID机制,这就为Chromium的renderer进程提供独立开来的可能性。每个Renderer进程都有唯一的UID,因而它们之间和Browser进程互相不能访问,直接被隔离开来。
之后是渲染部分,特别是GPU硬件加速部分也有很多不同,以后会一一介绍他们。
最后是功能方面,同桌面版比较,一些功能如HTML5,插件,NativeClient,extension等目前都不支持。
## 源文件目录
content/public/android/
content模块中的android接口,例如contentview等
content/shell/android
Contentshell相关类
chrome/android
TestShell的相关类
android_webview/
该目录包含实现Android系统当前WebView接口所需的内部实现类,基于Chrome的内核
## 参考资料
1. https://code.google.com/p/chromium/wiki/AndroidBuildInstructions
By yongsheng@chromium.org
转载于:https://www.cnblogs.com/xiaowangba/archive/2013/03/26/6313858.html
理解WebKit和Chromium: Chromium for Android相关推荐
- 理解WebKit和Chromium: 前言
注:朱永盛老师的<理解WebKit和Chromium>系列非常经典,在这里转发一下目录. 转载请注明原文地址:http://blog.csdn.net/milado_nju 这几年来,我阅 ...
- 理解WebKit和Chromium: Canvas2D及其实现
转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7293012 # Canvas 2D及其在WebKit和Chromium中的实现 ...
- 理解WebKit和Chromium: Content API和CEF3
转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7455373 # Content API及CEF3 ## 概述 相信你一定看过下面 ...
- 理解WebKit和Chromium: WebKit的CSS实现
转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7685517 # CSS在WebKit和Chromium中的实现 ## 概述 前面 ...
- 理解WebKit和Chromium: WebKit, WebKit2, Chromium和Chrome介绍
转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7292164 ##概述 在介绍本系列各个专题之前,有必要先解释一下极其容易混淆的几 ...
- 理解WebKit和Chromium: WebKit渲染基础
转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7292131 # WebKit渲染基础 ## 概述 WebKit是一个渲染引擎,而 ...
- 理解WebKit和Chromium: WebKit和Blink
转载请注明出处:http://blog.csdn.net/milado_nju/ 关注Web和HTML5领域的人最近应该都有了解WebKit项目的重磅消息,那就是Google退出WebKit项目,创建 ...
- 理解WebKit和Chromium: WebKit和Chromium组成
转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7300074 在"WebKit,WebKit2,Chromium和Chr ...
- 理解WebKit和Chromium: Web应用和Web运行环境
转载请注明原文地址:http://blog.csdn.net/milado_nju 注:鉴于这一领域非常热,自己也投身其中,会单独开辟一个专题介绍Web应用和Web运行环境. ## 概述 Web已经从 ...
最新文章
- 依那西普速诱导RA快速缓解预示临床和放射学持久缓解
- md5可以解密吗_Python训练营作业1:加密解密
- 程序员黑话,看懂的都是老司机!
- 如何创建自己的composer包
- 面试官:什么是 Reactor 和 Proactor
- NSNotification 消息通知的3种方式
- 私人定制-代码生成器3
- 微服务架构及其最重要的10个设计模式
- admixture软件_使用ADMIXTURE进行群体结构分析
- uchome 2.0 存在持久XSS漏洞
- 原生Js通过form表单提交后的跳转问题
- hive sql alter table 修改表操作小记
- win10无法访问共享文件,报出错误代码0x80004005
- 手把手教你Markdown语法
- 计算机电脑用英语单词怎么读,计算器 英语
- 网页上怎么查询服务器地址,怎么查看一个网页的服务器地址
- WZOI-277白细胞计数
- Scratch不仅适合小朋友,程序员和大学老师都应该广泛使用!!!
- EasyCVR视频广场的视频分享时,需要用户登录的原因分析及优化
- 解决 Python Matplotlib 绘图时不连续x轴自动补全的问题(xsticks)
热门文章
- opencv 图像去噪要点总结
- Spring----自定义异常类
- 19 python正则表达式及相关函数
- aDev第13期#个性化推荐技术#总结(Part III, Final: 稳国柱@豆瓣)
- Why Vector Clock are Easy or Hard?
- 在Repeater控件,Repeater1控件中都有FooterTemplate模板.但你在后台中如何去找FooterTemplate中的控件呢?...
- c++吃豆人代码_山药豆的功效与作用营养功效
- 神经网络有可能被公式化表达吗?
- ubuntu+VsCode+Cmake+eigen 开发eigen应用
- 陈炳藻用计算机研究,计算机闯入“大观园”