通过这两天对4.4 webview的调研发现,4.4 google已经将android原来的webview主要实现都去掉了,但是作为系统级的frameworks,要考虑到向后兼

容,API是不能随便乱动的,所以framework/base下面webview中留下了提供给上层接口的一些类文件。

对Anrdoid webview实现取而代之的是chromium项目的webview,通过桥接的方式将chromium的中webview的实现和framework base的webview接口相联

系,主要结构如下:



Android.webkit.WebView








Bridge from AwContents to WbView
Android AOSP






















Chrome Project
AwContents








Content Browser Components








Blink

上图所示的代码结构如下:

module code path function
android.webkit.WebView frameworks/base/core webview interface
android.webview.chromium frameworks/webview WebViewChromium,the bridge from AwContents to WebView
org.chromium.android_webview external/chromium_org/android_webview AwContents,the Proxy of Chromium ContentView
org.chromium.content.browser external/chromium_org/content/public Chromium ContentView

根据上述图表信息可以看到4.4 webview的实现最终转移到chromium的ContentView来进行,在ContentView所在的模块最终调用native的内核对网页进行渲染。

形象的理解上述流程从一个loadUrl来看,详细流程如下:

Browser.loadUrl ------> WebView.loadUrl -------> WebViewChromium.loadUrl --------> AwContents.loadUrl ------> ContentViewCore.loadUrl

从Browser APP调用loadUrl之后依次经过上面表格中的四个模块的调用,最终结束了WebView的内部流程,最后在ContentViewCore.中调用nativeLoadUrl从而调到内核的具体实现中。


上面这个loadUrl是一个比较简单调用流程的例子,在一些比较复杂的调用流程在org.chromium.content.browser的类中还会去调用chromium_org下面的其它类的实现,比如调用base下面的基本类库等等。


Chromium WebView使用的webkit内核的代码在external/chromium_org/third_party/WebKit目录下,Chromium_org目录下面会有java以及C/C++的Code,在java层中调用的native方法会在对应目录下的C code文件中实现。


JNI的实现在4.4中使用Chromium中的Python脚本进行自动生成JNI相关的文件,java向native层的调用方法前面会带有native字样,如nativeLoadUrl,

而native层调用java层的方法会有@CallByNative的注释,python脚本会在编译的时候根据这个注释自动的去生成JNI的相关的文件。

java层的native方法将方法名前面的native字样直接去掉就是native层对应的该方法的实现,如Java层nativeLoadUrl =====》 native层的loadUrl


有待继续study.......


参考资料 http://mogoweb.net/archives/596

http://www.ituring.com.cn/minibook/705


更多相关文章

  1. 【Android】Could not find XXX.apk!的解决方法
  2. Android(安卓)的启动流程
  3. Android(安卓)ROM包制作
  4. APK的安装过程及原理详解
  5. Android(安卓)进程和线程(二)
  6. Android中的线程和线程池
  7. Android显示gif格式图片
  8. Android(安卓)Studio引入Kotlin插件
  9. Android基础知识整理

随机推荐

  1. android数字证书-签名(步骤)
  2. Android原生(Native)C开发之二:framebuffe
  3. Android持久化技术之SharedPreferences存
  4. Android(安卓)NDK工程的编译和链接调试
  5. Android中的小技巧:TextView限制行数和字
  6. Android(安卓)8.0 新特性
  7. Android(安卓)滑动侧边栏(Sliding Menu)第
  8. Android(安卓)boot.img介绍
  9. 25、Android中通过Intent传递对象、集合
  10. android的测试工具CTS