转载请注明出处: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相关推荐

  1. 理解WebKit和Chromium: 前言

    注:朱永盛老师的<理解WebKit和Chromium>系列非常经典,在这里转发一下目录. 转载请注明原文地址:http://blog.csdn.net/milado_nju 这几年来,我阅 ...

  2. 理解WebKit和Chromium: Canvas2D及其实现

    转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7293012 # Canvas 2D及其在WebKit和Chromium中的实现 ...

  3. 理解WebKit和Chromium: Content API和CEF3

    转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7455373 # Content API及CEF3 ## 概述 相信你一定看过下面 ...

  4. 理解WebKit和Chromium: WebKit的CSS实现

    转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7685517 # CSS在WebKit和Chromium中的实现 ## 概述 前面 ...

  5. 理解WebKit和Chromium: WebKit, WebKit2, Chromium和Chrome介绍

    转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7292164 ##概述 在介绍本系列各个专题之前,有必要先解释一下极其容易混淆的几 ...

  6. 理解WebKit和Chromium: WebKit渲染基础

    转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7292131 # WebKit渲染基础 ## 概述 WebKit是一个渲染引擎,而 ...

  7. 理解WebKit和Chromium: WebKit和Blink

    转载请注明出处:http://blog.csdn.net/milado_nju/ 关注Web和HTML5领域的人最近应该都有了解WebKit项目的重磅消息,那就是Google退出WebKit项目,创建 ...

  8. 理解WebKit和Chromium: WebKit和Chromium组成

    转载请注明原文地址:http://blog.csdn.net/milado_nju/article/details/7300074 在"WebKit,WebKit2,Chromium和Chr ...

  9. 理解WebKit和Chromium: Web应用和Web运行环境

    转载请注明原文地址:http://blog.csdn.net/milado_nju 注:鉴于这一领域非常热,自己也投身其中,会单独开辟一个专题介绍Web应用和Web运行环境. ## 概述 Web已经从 ...

最新文章

  1. 依那西普速诱导RA快速缓解预示临床和放射学持久缓解
  2. md5可以解密吗_Python训练营作业1:加密解密
  3. 程序员黑话,看懂的都是老司机!
  4. 如何创建自己的composer包
  5. 面试官:什么是 Reactor 和 Proactor
  6. NSNotification 消息通知的3种方式
  7. 私人定制-代码生成器3
  8. 微服务架构及其最重要的10个设计模式
  9. admixture软件_使用ADMIXTURE进行群体结构分析
  10. uchome 2.0 存在持久XSS漏洞
  11. 原生Js通过form表单提交后的跳转问题
  12. hive sql alter table 修改表操作小记
  13. win10无法访问共享文件,报出错误代码0x80004005
  14. 手把手教你Markdown语法
  15. 计算机电脑用英语单词怎么读,计算器 英语
  16. 网页上怎么查询服务器地址,怎么查看一个网页的服务器地址
  17. WZOI-277白细胞计数
  18. Scratch不仅适合小朋友,程序员和大学老师都应该广泛使用!!!
  19. EasyCVR视频广场的视频分享时,需要用户登录的原因分析及优化
  20. 解决 Python Matplotlib 绘图时不连续x轴自动补全的问题(xsticks)

热门文章

  1. opencv 图像去噪要点总结
  2. Spring----自定义异常类
  3. 19 python正则表达式及相关函数
  4. aDev第13期#个性化推荐技术#总结(Part III, Final: 稳国柱@豆瓣)
  5. Why Vector Clock are Easy or Hard?
  6. 在Repeater控件,Repeater1控件中都有FooterTemplate模板.但你在后台中如何去找FooterTemplate中的控件呢?...
  7. c++吃豆人代码_山药豆的功效与作用营养功效
  8. 神经网络有可能被公式化表达吗?
  9. ubuntu+VsCode+Cmake+eigen 开发eigen应用
  10. 陈炳藻用计算机研究,计算机闯入“大观园”