基于chromiumcontentAPI如何定制自己的WebView

基于chromiumcontentAPI如何定制自己的WebView

2023年6月28日发(作者:)

基于chromiumcontentAPI如何定制自己的WebView

相信做过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_implweb_contents_observer、、web_contents_delegaterender_view_impl、、render_view_host_impl等等。把这几个对象的关系搞懂了,恭喜你同学,基本上你可以明白content API结构了。这是做后面工作的第一步。这一步往往花费的时间也比较长。

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

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

至于WebView的回调系统,可以参考下Android4.4的设计方式。WebView具备了,其callback具备了,同学,你的WebView作出来了。如果有交流问题,可以email给我:********************做这个WebView及其回调系统,也是公司需要而做。从前期技术验证和后面的架构设计与实现,前前后后,我一个人搞了一个月。当然了这个阶段的成果,细节上还需要去完善和成熟。不过整个框架具备了,填写点代码还搞不定的话,回家抱孩子去吧。

发布者:admin,转转请注明出处:http://www.yc00.com/news/1687955420a60610.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信