转载请注明出处http://blog.csdn.net/typenamepowered 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部分代码
参考资料: https://code.google.com/p/chromium/
https://source.android.com/
http://www.chromium.org/developers/design-documents/


更多相关文章

  1. Android(安卓)自定义加载框dialog
  2. Android简单通讯录的开发
  3. audio的输出设备切换分析
  4. Android(安卓)开发TCP、UdP客户端
  5. okhttp3的基本使用
  6. android webview的 一些设置(js java交互)
  7. Android(安卓)Handler的使用yu应该注意的问题
  8. Android(安卓)- HttpURLConnection 抛出异常
  9. android P 添加自定义系统属性,并监听变化

随机推荐

  1. Hyper-V 上的android
  2. Android HAL实例学习-Jollen的mokoid工程
  3. Android 如何直播 RTMP 流
  4. Android开发学习笔记:TextView的属性详解
  5. Android studio 安装与配置【Android学
  6. Android框架模式(1)-MVP入门
  7. Ubuntu Linux下安装JDK,Android SDK,Andr
  8. Android 学习系列 - Activity
  9. Android 通知总结
  10. Android 通过百度地图SDK 实现地图显示和