標籤:des android style blog http io color ar os
轉載請註明出處 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 side1.
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 side1.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/
Android Chromium for WebView代碼結構