转载请注明出处 http://blog.csdn.net/typename powered by miechalzhao@gmail.com

概述

        相信关注Android 平台开发的大家已经观察到Android 4.4及其以上WebView的默认实现从Webkit变更为chromium, 这对使用Android WebView来说是利好消息,基于chromium的WebView性能更好更流畅,并且AOSP已经做了老版本API兼容,不需要我们的应用程序做任何修改就能运行在Android 4.4上。本文介绍Chromium for WebView的实现代码结构。其实现分为两部分,一部分是Android WebView的Framework 以及public API 还有一部分是WebView的实现核心Chromium 下面这幅图展示这两种之间的关系以及上下结构。
 

Android Tree side

1.frameworks/base -- core/java/android/webkit/
(1)定义Public API(WebView,WebViewSettings, etc)
(2) 定义包内部隐藏类 WebViewFactoryProvider,WebViewProvider
(3)定义各种"POD(plain old data)“数据类型,用户在应用程序与 WebView实现间传递的数据类型。比如URLUtil类。
(4)定义一些WebView 的具体实现代码
2.frameworks/webview -- chromium/java
(1)glue 层代码,桥接Android WebView Framework 和 external/chromium_org
(2)在java部分这是chromium WebViewFactory的主要入口。
(3)这个目录下实现代码的目标是仅仅依赖android_webview的public API(部分除外,比如ThreadUtils,LibraryLoader,etc).并且不包含复杂逻辑。仅仅保持glue层状态。
3.frameworks/webview -- chromium/plat_support
  这部分代码提供平台支持,native support library绑定少部分android_webview/public api的副本(GL functor, skia bitmap访问utilities)

Chromium Tree side

1.android_webview/java
 (1)chromium 的顶层入口部分。
 (2)在Chromium 代码基础上提供一层wrapper/semi来向下兼容Android系统版本。
 (3)WebView的大部分API实现的后台支持由Chromium content                                                                    module(http://dev.chromium.org/developers/content-module)以及附属的components  browser (http://dev.chromium.org/developers/design-documents/browser-components)
         这部分代码通过JNI对应到native部分代码 android_webview/native 目录下.
2.android_webview/native 
(1)这个目录的代码更应该叫JNI部分代码,这一层代码只是android_webview/java与native代码的衔接层代码。类的命名基本是java层类的副本映射,并且承当的作用也是相同的。
(2)此目录存在可以存放避免复杂的实现逻辑,减轻android_webview/browser的压力或者 components压力
(3)这部分代码必须和WebView 的Public API运行在同一线程,WebView Public API运行在UI 线程,因此这部分的代码功能也必须运行在UI 线程。与BrowserThread 或者IPC 渲染线程 这种重要的交互代码放在browser目录之下。
3.android_webview/browser
 (1)这个目录代码实现浏览等重要的特性功能。
 (2) 需要复杂与native 线程交互的代码需要在此封装。
 (3) 为了模块化以及模块测试,在这部分代码没有静态强制依赖上层代码  (android_webview/native)层代码。
4.android_webview/renderer
 包含所有在渲染进程中运行的逻辑代码。目前WebView只支持单进程渲染,browser/renderer保持分离,这是个非常实用的架构,分离java应用程序部分与web platform代码,避免两者偶尔,相互独立更稳定。
5.android_webview/lib
这个目录下主要是libwebviewchromium.so的入口,没有其他模块依赖这目录下代码。
6.android_webview/common
  声明一些raw type 提供给android_webview/browser 和 android_webview/renderer。
  WebView采用单进程模式,优势可以共享全局状态。这里也定义每个IPC的类型声明。
7.android_webview/public
(1)定义导出native部分的抽象接口,为关注在Java不能实现的重要的性能检测(比如渲染)   
(2)使用Android Framework内部工具来实现高性能后台兼容的custom view。
8.android_webview/unittestjava
   主要测试JNI部分代码
 
参考资料:

 

arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()