Android Chromium for WebView代碼結構

http://blog.csdn.net/typename/article/details/40896627


轉載請註明出處 http://blog.csdn.net/typename powered by [email protected]

概述

        相信關注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部分代碼

參考資料:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章