您当前位置:首页  >  系统工具  > webview最新版
webview最新版

webview最新版

软件类型:系统工具 软件大小:115.31MB 更新时间:2024-07-13 15:10 开发商:Google Inc.

浏览器 安全浏览器 双核浏览器

  • 详情
  • 信息
  • 合集
  • 教程
<
>
软件简介
软件功能强大,运行稳定,让大家可以轻松的使用这款软件来完成浏览器开发。

webview最新版》最新的版本对所有功能进行优化,并且运行更加稳定,这是一款基于Chromium浏览器内核的轻量级软件,专为移动应用程序集成浏览器功能而设计。它不同于传统的浏览器应用,而是作为应用内的一个组件,可以展示网页内容,支持HTML、CSS和JavaScript等前端技术。而且这款软件能够快速加载和渲染网页,提供流畅的用户体验,并支持开发者通过接口调用控制其行为,如加载进度、页面跳转等。这使得开发者可以在应用中轻松嵌入网页内容,扩展应用功能,提升用户交互性和多样性。

软件优势

1、内嵌网页显示:允许应用程序内部加载和显示网页内容,用户无需离开应用程序即可访问在线内容。

2、与应用程序的集成:它能够无缝集成到应用程序的用户界面中,使得开发者可以在应用中轻松地呈现包括交互性网页在内的多种内容。

3、页面加载优化:通过预加载和缓存技术,提升页面加载速度,从而改善用户体验。

4、支持多媒体内容:它支持显示包括图片、视频、音频等多媒体内容,使得应用能够展示丰富的多媒体信息。

webview最新版

软件特色

1、跨平台兼容性:能够跨多种操作系统和设备平台使用,为开发者提供了广泛的应用场景选择。

2、定制化配置:开发者可以通过配置WebView的参数、样式和行为来定制化浏览体验,以满足特定应用的需求。

3、安全性与隐私保护:它提供了安全的浏览环境,支持 HTTPS 加密协议,保护用户的个人隐私和数据安全。

4、快速更新与维护:能够通过应用商店更新机制快速更新,确保用户始终能够获得最新的安全补丁和功能改进。

Android WebView的具体实现与Chromium渲染引擎启动过程

这里以Android 8.0的源码为来说明,是先找到WebView的真正的构造函数:

webview最新版

这个构造函数会调用另外一个成员函数ensureProviderCreated()确保Chromium动态库已经加载。在Chromium动态库已经加载的情况下,WebView类的成员函数ensureProviderCreated还会创建一个WebViewProvider对象,并且保存在成员变量mProvider中。这个WebViewProvider其实才是真正用来实现WebView的功能的幕后大佬。上诉那些Android WebView主要的方式基本都是通过mProvider来实现的,例如loadUrl(String url)等方法。

webview最新版

有了这个mProvider之后,WebView类的构造函数就会继续调用mProvider.init(javaScriptInterfaces, privatepowsing)启动网页渲染引擎。对于基于Chromium实现的WebView来说,它使用的WebViewProvider是一个WebViewChromium对象。当这个WebViewChromium对象的成员函数init被调用的时候,它就会启动Chromium的网页渲染引擎。

所以,我们接下来看一下ensureProviderCreated的实现:

webview最新版

WebView类的成员函数ensureProviderCreated首先调用成员函数checkThread确保它是在WebView的创建线程中调用的,接下来又会判断成员变量mProvider的值是否为null。如果为null,就表示它还没有当前创建的WebView创建过Provider。在这种情况下,它首先会调用成员函数getFactory获得一个WebViewFactory。有了这个WebViewFactory之后,就可以调用它的成员函数createWebView创建一个WebViewProvider。

接下来我们再看一下getFactory()方法以及它的实现:

webview最新版

getFactory返回的WebView Factory是通过调用WebViewFactory类的静态成员函数getProvider获得的,getProvider首先是判断静态成员变量sProviderInstance的值是否等于null。如果等于null,那么就说明当前的App进程还没有加载过Chromium动态库。在这种情况下,就需要加载Chromium动态库,并且创建一个WebView Factory,保存在静态成员变量sProviderInstance。接下来我们就先分析Chromium动态库的加载过程,然后再分析WebView Factory的创建过程。

加载Chromium动态库是通过调用WebViewFactory类的静态成员函数loadNativeLipary实现的:

webview最新版

loadNativeLipary首先会调用成员函数getWebViewNativeLiparyPaths获得要加载的Chromium动态库的文件路径,然后再调用另外一个静态成员函数nativeLoadWithRelroFile对它进行加载。在加载的时候,会指定一个Chromium GNURELRO Section文件。这个Chromium GNURELRO Section文件是系统启动时候,通过启动一个临时进程生成的。其中静态成员函数nativeLoadWithRelroFile是一个JNI方法,它由C++层的函数LoadWithRelroFile实现:

webview最新版

LoadWithRelroFile判断自己是32位还是64位的实现,然后从参数lib32和lib64中选择对应的Chromium动态库进行加载。

这个加载过程是通过调用另外一个函数DoLoadWithRelroFile实现的:

webview最新版

函数DoLoadWithRelroFile的实现是通过Linker导出的函数androiddlopenext在Zyogote进程保留的地址空间中加载Chromium动态库的。注意,App进程是Zygote进程fork出来的,因此它同样会获得Zygote进程预留的地址空间。不过,函数DoLoadWithRelroFile会将告诉函数androiddlopenext在加载Chromium动态库的时候,将参数relro描述的Chromium GNURELRO Section文件内存映射到内存来,并且代替掉已经加载的Chromium动态库的GNURELRO Section。这是通过将指定一个ANDROIDDLEXTUSERELRO标志实现的。之所以可以这样做,是因为参数relro描述的Chromium GNURELRO Section文件对应的Chromium动态库的加载地址与当前App进程加载的Chromium动态库的地址一致。只要两个相同的动态库在两个不同的进程中的加载地址一致,它们的链接和重定位信息就是完全一致的,因此就可以通过文件内存映射的方式进行共享。共享之后,就可以达到节省内存的目的了。

这一步执行完成之后,App进程就加载完成Chromium动态库了。回到前面分析的WebViewFactory类的静态成员函数getProvider,它接下来继续创建一个WebViewFactory。这个WebViewFactory以后就可以用来创建WebViewProvider。

WebViewFactory类的静态成员函数getProvider首先要确定要创建的WebView Factory的类型。这个类型是通过调用另外一个静态成员函数getFactoryClass获得的:

webview最新版

从这里可以看到,WebViewFactory类的静态成员函数getFactoryClass返回的WebView Factory的类型为

com.android.webview.chromium.WebViewChromiumFactoryProviderForO。这个com.android.webview.chromium.WebViewChromiumFactoryProviderForO类是由前面提到的WebView Package提供的。这意味着WebViewFactory类的静态成员函数getProvider创建的WebView Factory是一个WebViewChromiumFactoryProvider对象:

webview最新版

WebViewChromiumFactoryProvider类的构造函数会调用AwpowserProcess类的静态成员函数loadLipary对前面加载的Chromium动态库进行初始化:

webview最新版

AwpowserProcess类的静态成员函数loadLipary又调用LiparyLoader类的静态成员函数loadNow对前面加载的Chromium动态库进行初始化:

webview最新版

LiparyLoader类的静态成员函数loadNow又调用另外一个重载版本的静态成员函数loadNow对前面加载的Chromium动态库进行初始化:

webview最新版

LiparyLoader类重载版本的静态成员函数loadNow又调用另外一个静态成员函数loadAlreadyLocked对前面加载的Chromium动态库进行初始化:

webview最新版

由于并不是所有的系统都支持在加载动态库时,以文件内存映射的方式代替它的GNURELRO Section,因此Chromium自己提供了一个Linker。通过这个Linker加载动态库时,能够以文件内存映射的方式代替要加载的动态库的GNURELRO Section,也就是实现前面提到的函数androiddlopenext的功能。在高于Android 5.0中,由于系统已经提供了函数androiddlopenext,因此,Chromium就不会使用自己的Linker加载动态库,而是使用Android系统提供的Linker来加载动态库。通过调用System类的静态成员函数loadLipary即可以使用系统提供的Linker来加载动态库。LiparyLoader类的静态成员函数loadAlreadyLocked要加载的动态库由NativeLiparies类的静态成员变量LIpARIES指定:

webview最新版

从这里可以知道,LiparyLoader类的静态成员函数loadAlreadyLocked要加载的动态库就是Chromium动态库。这个Chromium动态库前面已经加载过了,因此这里通过调用System类的静态成员函数loadLipary再加载时,仅仅是只会触发它导出的函数JNIOnLoad被调用,而不会重新被加载。Chromium动态库导出的JNIOnLoad被调用的时候,Chromium动态库就会执行初始化工作:

webview最新版

其中的一个初始化操作是给Chromium的Content层设置一个类型为AwMainDelegate的Main Delegate。这个AwMainDelegate实现在Chromium的androidwebview模块中。Android WebView是通过Chromium的androidwebview模块加载和渲染网页的。Chromium加载和渲染网页的功能又是实现在Content层的,因此,Chromium的androidwebview模块又要通过Content层实现加载和渲染网页功能。这样,Chromium的androidwebview模块就可以设置一个Main Delegate给Content层,以便它们可以互相通信。给Chromium的Content层设置一个Main Delegate是通过调用函数SetContentMainDelegate实现的:

webview最新版

从前面的分析可以知道,参数delegate指向的是一个AwMainDelegate对象,这个AwMainDelegate对象会被函数SetContentMainDelegate保存在全局变量gcontentmain_delegate中。这一步执行完成后,Chromium动态库就在App进程中加载完毕,并且也已经完成了初始化工作。与此同时,系统也为App进程创建了一个类型为WebViewChromiumFactoryProvider的WebViewFactory。回到前面分析的WebView类的成员函数ensureProviderCreated中,这时候就它会通过调用上述类型为WebViewChromiumFactoryProvider的WebViewFactory的成员函数createWebView为当前创建的WebView创建一个WebView Provider:

webview最新版

WebViewChromiumFactoryProvider类的成员函数createWebView创建的是一个类型为WebViewChromium的WebView Provider。这个WebView Provider将会返回给WebView类的成员函数ensureProviderCreated。WebView类的成员函数ensureProviderCreated再将该WebView Provider保存在成员变量mProvider中。这样,正在创建的WebView就获得了一个类型为WebViewChromium的WebView Provider。以后通过这个WebView Provider,就可以通过Chromium来加载和渲染网页了。

软件评测

这款软件使用广泛,涵盖了从社交媒体应用到电子商务平台等多个领域,成为移动应用开发中不可或缺的重要组成部分。

更新日志

v126.0.6478.134版本

小错误修复和改进。安装或更新到最新版本即可查看!

软件简介
举报
  • 软件大小115.31MB
  • 当前版本126.0.6478.134
  • 系统要求需要支持安卓系统5.2以上
  • 是否收费免费(软件内购买项目)
  • 软件语言中文
  • 包名com.google.android.webview
  • MD5b102bd2455e5d75050530e1df6713c58
  • 软件权限点击查看
  • 隐私说明点击查看
软件教程 更多
  • 《哔哩哔哩漫画》积分商城查看方法
    《哔哩哔哩漫画》积分商城查看方法

    哔哩哔哩漫画是一款深受用户喜爱的漫画阅读软件,里面不仅有海量漫画可以观看,大家也可以充值会员,解锁更多漫画章节。在每次充值会员或消费后,即可获得一定数量的积分。进入积分商城兑换商品寄了。可能有部分用户不知道积分商城在哪,那么接下来就让小编来

    2024-09-21 11:39:48
  • 《美团》开通会员方法
    《美团》开通会员方法

    很多时候大家在美团点外卖的时候,会发现开通会员,最后付款的时候会便宜很多。当然有时候大家很久没有开会员,再次开会员价格会更为便宜。对部分新用户来说,开通会员的步骤并不是很了解。那么接下来就让小编来告诉大家开通会员的详细步骤吧。

    2024-09-20 18:29:16
  • 《抖音》店铺会员退出方法
    《抖音》店铺会员退出方法

    现在大家不仅能在抖音上面看到各种类型的视频,还可以在直播间或商城里面,购买自己所需要的商品。大家在一些店铺购买商品的时候,会看到“成为会员,购买有优惠”字样。累积下来成为不少店铺的会员,后期觉得麻烦的话可以选择退出会员,下面是小编整理的退出

    2024-09-20 10:18:03
  • 《抖音》联系客服方法
    《抖音》联系客服方法

    抖音这款软件相信大家手机上都应该安装了,日常无聊的时候,打开抖音搜索自己想看的视频内容即可。在使用的过程中,如果出现什么问题,都是可以找客服进行反馈的。对新用户来说,大家不知道在哪里找客服,接下来就让小编来告诉大家联系客服的方法吧。

    2024-09-19 14:44:59
  • 《美团》退款申请方法
    《美团》退款申请方法

    大家日常可使用美团购买所需要的商品的,等骑手送货上门就可以了。如大家对商品不满意,可在订单页面申请退款,等商家同意后,就可以收到退回的金额。那么美团该如何申请退款呢,下面是小编整理的美团退款具体步骤,如大家感兴趣的话可以一起看看。

    2024-09-19 10:05:17
  • 《百度网盘》解压文件方法
    《百度网盘》解压文件方法

    大家日常需要下载文件或电影电视的时候,都可以通过在各个浏览器寻找资源,然后将其下载到百度网盘,接着进入百度网盘里面,找到文件下载解压就可以观看呢。对部分新手用户来说,大家只知道将文件下载到百度网盘,不知道怎么解压文件,所以今天小编就来详细告

    2024-09-19 09:02:00
  • 《微信键盘》打字声音关闭方法
    《微信键盘》打字声音关闭方法

    很多用户在使用微信键盘打字的时候,发现会出现按键声音,听起来感觉很吵,想关闭但却不知道微信键盘打字声音关闭方法,只需要进入微信键盘设置页面,找到声音和触感,点击右边关闭按钮就可以了,下面是小编整理的详细关闭方法,希望能给大家带来帮助。

    2024-09-14 09:05:24
  • 法定退休年龄查询渠道介绍
    法定退休年龄查询渠道介绍

    在9月13日这天针对退休人员的年龄做出了一些修改,该公告发布后大家都很关注改革后自己的具体退休年龄,因此就有小伙伴咨询法定退休年龄查询渠道有哪些?为解开小伙伴们的疑惑,下面小编就给大家带来法定退休年龄查询渠道介绍,有需要的小伙伴不要错过,快

    2024-09-13 16:10:23
最新录入 更多
类似软件
热门合集推荐 更多