|
相信做過(guò)browser的同學(xué)們都接觸過(guò)chromium,或者做過(guò)其中的項(xiàng)目。我接觸chromium一年半了。在兩個(gè)企業(yè)設(shè)計(jì)與做過(guò)自定制瀏覽器項(xiàng)目。我做的是 browser for android。 Android原生瀏覽器在Android4.2及之前的系統(tǒng)中都有。但是其支持Html5性能不是很好。與chrome for android比較起來(lái),其不能支持sandbox,不能支持硬件加速。所以,原生瀏覽器在html5時(shí)代已經(jīng)out了。下文中,我來(lái)分享下我們做瀏覽器內(nèi)核部分的心得。 首先,我們做子定制瀏覽器內(nèi)核的效果:類(lèi)似于chrome for android,良好的支持硬件加速和sandbox。其效果要媲美chrome for android。 看過(guò)Android4.4源碼的同學(xué)應(yīng)該知道,Android4.4上,WebView是WebViewChromium對(duì)象的封裝;而WebViewChromium對(duì)象是對(duì)AwContent對(duì)象的封裝。 研究過(guò)chromium的同學(xué),應(yīng)該對(duì)AwContent這個(gè)對(duì)象有所了解吧。這個(gè)對(duì)象的位置在src目錄下的android_webview目錄下。在chromium目錄結(jié)構(gòu)中,這塊代碼是對(duì)原聲瀏覽器WebView的下層支持與邏輯實(shí)現(xiàn)代碼部分。 在與android_webview目錄的同級(jí)目錄中有content目錄(后文稱(chēng)content API)。這個(gè)目錄是chrome將內(nèi)容顯示部分進(jìn)系剝離,獨(dú)立出來(lái)的一個(gè)目錄,該目錄只能進(jìn)行普通的網(wǎng)頁(yè)展示。(在content目錄下 ,有shell子目錄,可以編譯content_shell_apk,作為一個(gè)content目錄的使用Demo)。 如果想自己定制一個(gè)支持硬件加速和sandbox的WebView。個(gè)人覺(jué)得,應(yīng)該首先去了解和分析下content目錄的結(jié)構(gòu)。要明白幾個(gè)對(duì)象之間的關(guān)系:JAVA對(duì)象:Shell 、 ShellManager、ContentView、 ContentViewRenderView、 ContentView、ContentViewCore等等關(guān)系。這些對(duì)象是什么邏輯,這些對(duì)象如何去展示網(wǎng)頁(yè)和處理各種事件。 至于CPP對(duì)象:shell shell_manager content_view_core、web_contents_impl、web_contents_delegate、web_contents_observer、render_view_impl、render_view_host_impl等等。把這幾個(gè)對(duì)象的關(guān)系搞懂了,恭喜你同學(xué),基本上你可以明白content API結(jié)構(gòu)了。這是做后面工作的第一步。這一步往往花費(fèi)的時(shí)間也比較長(zhǎng)。 這一步做到了,然后接著看。 給你個(gè)提示,看看android_webview目錄下,WebView的底層對(duì)接的對(duì)象是誰(shuí)。上文中提到了,是AwContent對(duì)象。那么,OK。在content目錄下,這個(gè)AwContent相對(duì)象的對(duì)象是誰(shuí)?。客瑢W(xué),自己思考下吧。這個(gè)問(wèn)題,我思考了,兩個(gè)周。實(shí)驗(yàn)了一把,沒(méi)問(wèn)題的。 至于WebView的回調(diào)系統(tǒng),可以參考下Android4.4的設(shè)計(jì)方式。WebView具備了,其callback具備了,同學(xué),你的WebView作出來(lái)了。如果有交流問(wèn)題,可以email給我:liuwenbo2018@163.com 做這個(gè)WebView及其回調(diào)系統(tǒng),也是公司需要而做。從前期技術(shù)驗(yàn)證和后面的架構(gòu)設(shè)計(jì)與實(shí)現(xiàn),前前后后,我一個(gè)人搞了一個(gè)月。當(dāng)然了這個(gè)階段的成果,細(xì)節(jié)上還需要去完善和成熟。不過(guò)整個(gè)框架具備了,填寫(xiě)點(diǎn)代碼還搞不定的話,回家抱孩子去吧。 |
|
|
來(lái)自: wusiqi111 > 《android webview》