谷歌webview是谷歌官方推出的预安装系统组件。该应用支持渲染网页并执行相关代码运行,能及时优化网页数据,还可帮助用户存取浏览器历史记录等。有需求的用户可通过本站提供的下载链接,进入谷歌webview软件了解更多功能。
1、使用后手机运行更流畅,能出色地浏览各类网页,及时优化网页数据,是实用的网页辅助插件。
2、专属架构处理器定制处理,呈现各种有趣的网页信息,系统可自定义组件数据,使用稳定。
3、具备接入式操作体验数据,各类应用程序均可享用,不想使用可在手机上安装并通过网页呈现。
【位置感知浏览】
随时获取更优质、与您更相关的资讯。
【同步】
可从任何设备存取浏览器历史记录、书签、密码及已打开的页面。
【附加元件】
能快速简便地自定义浏览器。
【速度】
即刻上线,快速找到您所需内容。
以android 8.0源码为例,先找到webview真正的构造函数:

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

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

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

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

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

loadwithrelrofile判断自身是32位还是64位实现,从lib32和lib64参数中选择对应chromium动态库加载。
此加载过程通过调用doloadwithrelrofile函数实现:

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静态成员函数获取:

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

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

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

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

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

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

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

其中一项初始化操作是为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:

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

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手游网,请持续关注我们,更多精彩不容错过!