一 综述
本文主要分析在Android系统上,基于chromium内核的浏览器loadUrl的流程。
作为android开发者都知道WebView是Androi系统非常重要的组件,任何需要和网络打交道的app都需要WebView,而访问网络资源,加载一个网页页非常简单,形如
webview.loadUrl("http://m.baidu.com");就会在webview中把百度首页展示出来,是不是非常的神奇。
那么本文会基于chromium44版本的content_shell_test和Android WebView 分析一下Browser的loadUrl后,内核到底发生了什么?有必要提一下,android4.4(Kitkat)以后,Android系统的WebView内核支持从WebKit切换成了google自家chromium/blink内核。给整个webview的架构带来了巨大的变化。应用开发者看到的是webview,下面与它对接的是WebViewChromium类,然后WebViewChromuim会调用AwContents,AwContents紧接着会相关到ContentViewCore, 如图1所示。
图1 Android WebView架构图
上图中WebViewProvider是一个接口类,WebViewChromium是WebViewProvider的具体实现类,同时又起着连接Chromium的作用。
在Android 4.4上,代码结构如下:
#1 frameworks/base/core/java/android/webkit
这里是对Application可见的WebView,WebViewSettings等等。
#2 frameworks/webview/chromium/java
这里是桥接层代码,比较重要的类是WebViewChromium,起到实现WebViewProvider接口,以及连接到chromium。
#3 frameworks/webview/plat_support/
由于WebView的内核是chromium,在页面绘制时还需要调用Android系统相关接口,所以,这里主要是提供Android平台支持。
#4 external/chromium_org/android_webview/
这里是chromium在Android平台上的顶层入口部分。
二 WebView loadUrl