just_person / 理解WebKit和C... / Chromium for Android

分享

   

Chromium for Android

2013-04-28  just_pers...

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

目前,Android系统中的android.webkit.WebView是一个很重要的类,很多Android的应用程序使用它来加载和渲染网页,这是很常见的嵌入式用法。因为同其它AndroidView作为UI的一个控件来说,它没有什么不同,所以应用程序可以很方便的将其嵌入自己的UI布局中来。Android的默认浏览器和它共享同样的WebKit内核。既然Chrome在Android上的浏览器已经发布出来了,那么是否也可以使用Chrome的内核来实现该WebView呢?答案当然是肯定的。

目前,这部分代码已经启动,其核心思想保持WebView的API兼容性,也就是说内部的实现从android browser的内核变了chromeforandroid的内核,这样对使用它的应用程序来说,不需要做任何改变。

你可以通过编译目标“android_webview_apk”来尝试一下它的功能,这也是基于WebView的一个简单封装,类比一下就如同content模块和Content Shell的关系。

## 同桌面版的不同之处

Chromium的Android版同传统的桌面版有很多不同的地方,具体包括以下几个方面:

首先是工作模式方面,Chromium的桌面版一直紧跟trunk,有着不同的发布渠道,包括dev,beta,stable等。而Android版则是基于某个稳定版在内部开发,然后不定期的释放出一些代码,其并没有同最新的Chromium同步(最近才开始保持同步)。

其次是开源方面,Chromium桌面版都是开源的,但是目前来看,Android版只是开源了部分,就是Content模块和以下,浏览器的一些功能模块,而UI部分则没有而且在可以预见的未来也不会开源。

再次是架构方面,首先是GPU进程变成为browser进程的一个线程,其次是线程化合成已经是Android版的一个默认功能。见下图所示,你可以跟“多进程模型”中的进程模型图进行对比一下。

之后是渲染部分,特别是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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>