手机版
1666游戏,提供海量好玩的游戏!
当前位置: 首页 > 手机软件 > 系统工具 > 谷歌webview

谷歌webview

谷歌webview
  • 类型:系统工具
  • 版本:145.0.7632.79
  • 大小:215 MB
  • 更新:2026-03-02
扫二维码下载

谷歌webview是谷歌官方推出的预安装系统组件。该应用支持渲染网页并执行相关代码运行,能及时优化网页数据,还可帮助用户存取浏览器历史记录等。有需求的用户可通过本站提供的下载链接,进入谷歌webview软件了解更多功能。

软件特色

1、使用后手机运行更流畅,能出色地浏览各类网页,及时优化网页数据,是实用的网页辅助插件。

2、专属架构处理器定制处理,呈现各种有趣的网页信息,系统可自定义组件数据,使用稳定。

3、具备接入式操作体验数据,各类应用程序均可享用,不想使用可在手机上安装并通过网页呈现。

软件功能

【位置感知浏览】

随时获取更优质、与您更相关的资讯。

【同步】

可从任何设备存取浏览器历史记录、书签、密码及已打开的页面。

【附加元件】

能快速简便地自定义浏览器。

【速度】

即刻上线,快速找到您所需内容。

使用指南

以android 8.0源码为例,先找到webview真正的构造函数:

谷歌webview软件截图1

此构造函数会调用ensureprovidercreated成员函数,确保chromium动态库已加载。加载后,webview类的ensureprovidercreated成员函数会创建webviewprovider对象并保存在mprovider成员变量中。webviewprovider才是实现webview功能的关键。上述android webview主要方式基本通过mprovider实现,如loadurl(string url)等方法。

谷歌webview软件截图2

有了mprovider后,webview类构造函数会调用mprovider.init(javascriptinterfaces, privatepowsing)启动网页渲染引擎。基于chromium的webview使用webviewchromium对象作为webviewprovider。调用webviewchromium对象的init成员函数时,会启动chromium网页渲染引擎。

接下来看ensureprovidercreated的实现:

谷歌webview软件截图3

webview类的ensureprovidercreated成员函数先调用checkthread确保在webview创建线程中调用,再判断mprovider成员变量是否为null。若为null,表示尚未为当前webview创建provider,此时会调用getfactory成员函数获取webviewfactory。有了webviewfactory后,调用其createwebview成员函数创建webviewprovider。

接着看getfactory()方法及其实现:

谷歌webview软件截图4

getfactory返回的webview factory通过调用webviewfactory类的getprovider静态成员函数获取。getprovider先判断静态成员变量sproviderinstance是否为null。若为null,说明当前app进程未加载chromium动态库,此时需加载chromium动态库并创建webview factory,保存在静态成员变量sproviderinstance中。下面先分析chromium动态库加载过程,再分析webview factory创建过程。

加载chromium动态库通过调用webviewfactory类的loadnativelipary静态成员函数实现:

谷歌webview软件截图5

loadnativelipary先调用getwebviewnativeliparypaths成员函数获取要加载的chromium动态库文件路径,再调用nativeloadwithrelrofile静态成员函数加载。加载时指定chromium gnurelro section文件,该文件由系统启动临时进程生成。nativeloadwithrelrofile是jni方法,由c++层的loadwithrelrofile函数实现:

谷歌webview软件截图6

loadwithrelrofile判断自身是32位还是64位实现,从lib32和lib64参数中选择对应chromium动态库加载。

此加载过程通过调用doloadwithrelrofile函数实现:

谷歌webview软件截图7

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,用于创建webviewprovider。

webviewfactory类的getprovider静态成员函数先确定要创建的webview factory类型,通过调用getfactoryclass静态成员函数获取:

谷歌webview软件截图8

可见,webviewfactory类的getfactoryclass静态成员函数返回的webview factory类型为com.android.webview.chromium.webviewchromiumfactoryproviderforo,由webview package提供。这意味着getprovider静态成员函数创建的webview factory是webviewchromiumfactoryprovider对象:

谷歌webview软件截图9

webviewchromiumfactoryprovider类的构造函数会调用awpowserprocess类的loadlipary静态成员函数初始化前面加载的chromium动态库:

谷歌webview软件截图10

awpowserprocess类的loadlipary静态成员函数又调用liparyloader类的loadnow静态成员函数初始化前面加载的chromium动态库:

谷歌webview软件截图11

liparyloader类的loadnow静态成员函数又调用另一个重载版本的loadnow静态成员函数初始化前面加载的chromium动态库:

谷歌webview软件截图12

liparyloader类重载版本的loadnow静态成员函数又调用loadalreadylocked静态成员函数初始化前面加载的chromium动态库:

谷歌webview软件截图13

并非所有系统都支持加载动态库时以文件内存映射方式代替gnurelro section,因此chromium提供了自己的linker。通过此linker加载动态库时,能以文件内存映射方式代替要加载动态库的gnurelro section,即实现androiddlopenext函数功能。在高于android 5.0系统中,因系统已提供androiddlopenext函数,chromium不再使用自己的linker加载动态库,而是用android系统提供的linker。通过调用system类的loadlipary静态成员函数可使用系统linker加载动态库。liparyloader类的loadalreadylocked静态成员函数要加载的动态库由nativeliparies类的liparies静态成员变量指定:

谷歌webview软件截图14

可知,liparyloader类的loadalreadylocked静态成员函数要加载的动态库就是chromium动态库。此动态库前面已加载,此时调用system类的loadlipary静态成员函数再次加载,仅会触发其导出的jnionload函数被调用,不会重新加载。chromium动态库导出的jnionload函数被调用时,会执行初始化工作:

谷歌webview软件截图15

其中一项初始化操作是为chromium的content层设置类型为awmaindelegate的main delegate。awmaindelegate在chromium的androidwebview模块实现。android webview通过chromium的androidwebview模块加载和渲染网页,chromium加载和渲染网页功能在content层实现,所以chromium的androidwebview模块要通过content层实现加载和渲染网页功能。这样,chromium的androidwebview模块可为content层设置main delegate以便通信。通过调用setcontentmaindelegate函数为chromium的content层设置main delegate:

谷歌webview软件截图16

由前面分析可知,参数delegate指向awmaindelegate对象,该对象会被setcontentmaindelegate函数保存在全局变量gcontentmain_delegate中。此步骤完成后,chromium动态库在app进程中加载完毕并完成初始化。同时,系统为app进程创建了webviewchromiumfactoryprovider类型的webviewfactory。回到webview类的ensureprovidercreated成员函数,此时会通过调用上述webviewchromiumfactoryprovider类型的webviewfactory的createwebview成员函数为当前创建的webview创建webview provider:

谷歌webview软件截图17

webviewchromiumfactoryprovider类的createwebview成员函数创建的是webviewchromium类型的webview provider,返回给webview类的ensureprovidercreated成员函数。webview类的ensureprovidercreated成员函数再将该webview provider保存在mprovider成员变量中。这样,正在创建的webview就获得了webviewchromium类型的webview provider,后续可通过此provider用chromium加载和渲染网页。

软件说明

1、android手机的google搜索应用程序可为手机提供流畅的网络搜索体验。

2、官方提供的这款搜索应用程序可搜索相关网页内容及手机本地内容。

3、包括应用程序、浏览器书签和记录、联系人姓名、音乐等内容。

更新内容

v145.0.7632.79:

• 修复错误并快速提升性能

v138.0.7204.67:

• 更正部分错误并提高速度

看了这么多,您下载了谷歌webview软件吗?想要下载最新安卓app就来1666手游网,请持续关注我们,更多精彩不容错过!

点击展开全部

游戏截图

  • 谷歌webview1
  • 谷歌webview2
  • 谷歌webview3
  • 谷歌webview4

猜你喜欢