首页 > 代码库 > 基于chromium content API 如何定制自己的WebView

基于chromium content API 如何定制自己的WebView

HI:

    ALL。相信做过browser的同学们都接触过chromium,或者做过其中的项目。我接触chromium一年半了。在两个企业设计与做过自定制浏览器项目。我做的是 browser for android。

    Android原生浏览器在Android4.2及之前的系统中都有。但是其支持Html5性能不是很好。与chrome for android比较起来,其不能支持sandbox,不能支持硬件加速。所以,原生浏览器在html5时代已经out了。下文中,我来分享下我们做浏览器内核部分的心得。


   首先,我们做子定制浏览器内核的效果:类似于chrome for android,良好的支持硬件加速和sandbox。其效果要媲美chrome for android。

 

   看过Android4.4源码的同学应该知道,Android4.4上,WebView是WebViewChromium对象的封装;而WebViewChromium对象是对AwContent对象的封装。

    研究过chromium的同学,应该对AwContent这个对象有所了解吧。这个对象的位置在src目录下的android_webview目录下。在chromium目录结构中,这块代码是对原声浏览器WebView的下层支持与逻辑实现代码部分。

    在与android_webview目录的同级目录中有content目录(后文称content API)。这个目录是chrome将内容显示部分进系剥离,独立出来的一个目录,该目录只能进行普通的网页展示。(在content目录下 ,有shell子目录,可以编译content_shell_apk,作为一个content目录的使用Demo)。


     如果想自己定制一个支持硬件加速和sandbox的WebView。个人觉得,应该首先去了解和分析下content目录的结构。要明白几个对象之间的关系:JAVA对象:Shell 、 ShellManager、ContentView、 ContentViewRenderView、 ContentView、ContentViewCore等等关系。这些对象是什么逻辑,这些对象如何去展示网页和处理各种事件。

  至于CPP对象:shell  shell_manager   content_view_core、web_contents_impl、web_contents_delegate、web_contents_observer、render_view_impl、render_view_host_impl等等。把这几个对象的关系搞懂了,恭喜你同学,基本上你可以明白content API结构了。这是做后面工作的第一步。这一步往往花费的时间也比较长。

   这一步做到了,然后接着看。

   给你个提示,看看android_webview目录下,WebView的底层对接的对象是谁。上文中提到了,是AwContent对象。那么,OK。在content目录下,这个AwContent相对象的对象是谁啊?同学,自己思考下吧。这个问题,我思考了,两个周。实验了一把,没问题的。

   至于WebView的回调系统,可以参考下Android4.4的设计方式。WebView具备了,其callback具备了,同学,你的WebView作出来了。如果有交流问题,可以email给我:liuwenbo2018@163.com

   做这个WebView及其回调系统,也是公司需要而做。从前期技术验证和后面的架构设计与实现,前前后后,我一个人搞了一个月。当然了这个阶段的成果,细节上还需要去完善和成熟。不过整个框架具备了,填写点代码还搞不定的话,回家抱孩子去吧。


基于chromium content API 如何定制自己的WebView