概述
Android 4.4 Kitkat版本中,google对浏览器的策略发生了很大的改变,以前使用的是Webkit内核,在Kitkat版本中,采用Chromium内核实现。如此,与浏览器相关的framework层代码也相应的有所变动,主要体现在对Webview的实现,原本基于Android WebKit的WebView实现被换成基于Chromium的WebView实现。
从Android源码结构分析,Android 4.4之前版本中的external/WebKit目录被移除掉了,取而代之的是chromium_org,也就是说chromium已经完全取代了之前的WebKit 。而在framework层则多出了一个目录(/frameworks/webview/chromium/),原有的webkit目录(/frameworks/base/core/java/android/webkit/)依旧存在。上层应用依旧为Browser(/packages/apps/Browser),以下将主要针对Android 4.4中浏览器模块的framework架构进行分析。
WebView层次结构
Android 4.4 framework中WebView的结构分为了两层,一层为原有的WebView API层(/frameworks/base/core/java/android/webkit/),其主要提供一些API给上层使用,提供一些接口,对于这些提供给上层的API基本保持不变,便于与老的版本进行兼容。另外一层则为桥接代码层(/frameworks/webview/chromium/),其作为中间交互层,对WebView API接口数据的处理,并将处理信息传递到chromium内核中进行实现与执行。总体结构如所示:
上图主要有四个部分,其中跟WebView相关的主要是上面三个部分,首先是WebView接口部分,它提供对外编程接口,同时它的内部实现可以基于桥接代码,也就是第二个部分。桥接部分的代码主要有两个作用,其一是实现WebView接口对实现的调用,第二是调用下面一层的代码,这里面有个重要的部分就是需要设置AwContents为了绘图而需要设置的两组函数数组,这个在渲染部分介绍。它的代码可以在frameworks/webview/chromium部分找到。以上两个部分都是AOSP部分代码,而第三个部分是AwContents是在Chromium项目中的,主要是构建被桥接代码使用的接口,这一部分主要基于Content接口,里面有很多不同于Chrome浏览器的实现。
Browser framework的实现关系
Android 4.4 Kitkat版本中,google对浏览器的策略发生了很大的改变,以前使用的是Webkit内核,在Kitkat版本中,采用Chromium内核实现。如此,与浏览器相关的framework层代码也相应的有所变动,主要体现在对Webview的实现,原本基于Android WebKit的WebView实现被换成基于Chromium的WebView实现。
从Android源码结构分析,Android 4.4之前版本中的external/WebKit目录被移除掉了,取而代之的是chromium_org,也就是说chromium已经完全取代了之前的WebKit 。而在framework层则多出了一个目录(/frameworks/webview/chromium/),原有的webkit目录(/frameworks/base/core/java/android/webkit/)依旧存在。上层应用依旧为Browser(/packages/apps/Browser),以下将主要针对Android 4.4中浏览器模块的framework架构进行分析。
WebView层次结构
Android 4.4 framework中WebView的结构分为了两层,一层为原有的WebView API层(/frameworks/base/core/java/android/webkit/),其主要提供一些API给上层使用,提供一些接口,对于这些提供给上层的API基本保持不变,便于与老的版本进行兼容。另外一层则为桥接代码层(/frameworks/webview/chromium/),其作为中间交互层,对WebView API接口数据的处理,并将处理信息传递到chromium内核中进行实现与执行。总体结构如所示:
上图主要有四个部分,其中跟WebView相关的主要是上面三个部分,首先是WebView接口部分,它提供对外编程接口,同时它的内部实现可以基于桥接代码,也就是第二个部分。桥接部分的代码主要有两个作用,其一是实现WebView接口对实现的调用,第二是调用下面一层的代码,这里面有个重要的部分就是需要设置AwContents为了绘图而需要设置的两组函数数组,这个在渲染部分介绍。它的代码可以在frameworks/webview/chromium部分找到。以上两个部分都是AOSP部分代码,而第三个部分是AwContents是在Chromium项目中的,主要是构建被桥接代码使用的接口,这一部分主要基于Content接口,里面有很多不同于Chrome浏览器的实现。
Browser framework的实现关系
之前也提到Android 4.4 framework中WebView相关主要由WebView API与桥接代码组成。WebView API作为接口部分,其很多类的实现与桥接代码部分一一对应。在WebView API中有与上层交互紧密相关的WebView类,网页加载有关的WebViewClient类,浏览器Cookie管理相关的CookieManager类,地理位置相关GeolocationPermissions类,浏览历史相关WebHistoryItem类,设置相关WebSettings类等,其对应桥接层类分别有WebViewChromium、WebViewContentsClientAdapter、CookieManagerAdapter、GeolocationPermissionsAdapter、WebHistoryItemChromium、ContentSettingsAdapter等。具体关系图如下图所示:
参考网页:
http://mogoweb.net/archives/686/comment-page-1
http://blog.csdn.net/milado_nju/article/details/17098399#comments