当前位置:首页 >安卓软件 >系统工具 >Android System WebViewv125.0.6422.3

Android System WebViewv125.0.6422.3

类型:系统工具 平台:安卓 语言:简体中文
大小:84.34 M 更新:2024-04-23 10:32:21
检测:安全无毒 无广告无插件

扫描二维码下载

软件介绍

Android System WebView是一个基于WebKit引擎的控件,主要用于在应用中展示和渲染Web页面。Android System WebView支持与嵌入网页的JavaScript代码进行交互,使得原生应用能够与Web内容进行通信。Android System WebView可以在应用程序中展示网络上的或本地存储的HTML文件。Android System WebView在移动应用开发中扮演着重要角色,特别是在所谓的混合应用(Hybrid App)开发中,它允许开发者融合Web和原生技术,以达到更高效的开发过程和更好的用户体验。

使用说明

Android System WebView使用说明

Android System WebView是一个可视化的组件,是作为原生APP的视觉部分。可以内嵌在移动端,实现前端的混合式开发,大多数混合式开发框架都是基于Android System WebView模式进行二次开发的。比如:APIcloud、uni-app等等的框架。

一、Android System WebView入门知识

1、我们通常是用浏览器来浏览网页,你很清楚的知道你正在使用浏览器,要么是PC客户端,要么是手机上的app。但是Android System WebView是一个嵌入式的浏览器,是嵌入在原生应用中的,你可能都意识不到你在用浏览器。

2、传统浏览器分为两个部分,UI(地址栏、导航栏)和浏览器引擎。Android System WebView就是原生应用中的浏览器引擎。

3、Android System WebView只是一个可视化的组件,是作为原生APP的视觉部分。

4、用Android System WebView展示的内容是不需要存储在本地的,可以直接从服务器获取。

5、这种灵活性打开了浏览器端的web应用和希望展示在原生应用中的web应用代码直接可重用的世界。

6、运行在Android System WebView中的JS代码有能力调用原生的系统API,没有传统浏览器沙箱的限制。

7、沙箱的存在是因为,你永远不能完全信任加载的web内容,所以不能允许它调用原生的系统API。而在Android System WebView中开发人员通常可以完全控制加载的内容,恶意代码进入并在设备上造成混乱的可能性很低。

8、在Android System WebView中,JS代码可以跟原生应用代码相互通信,也可以调用原生API集成酷炫的系统级功能,如传感器、存储、日历、联系人等。

二、Android System WebView的用法

1、作为APP内置浏览器,显示链接的内容。

2、用来显示广告。

3、完全承载APP内的所有交互。从技术角度看这些仍是原生应用,但它做的唯一原生操作就是托管Android System WebView,这种应用被称为混合应用。从部署和更新的角度来看,混合应用非常方便。

4、作为原生应用的扩展。许多原生应用会提供加载项或扩展程序来扩展其功能,由于web技术的简单性和强大,这些加载项和扩展通常以HTML、CSS、JS而不是C++、C#或其他来构建。

三、Android System WebView的精髓

Android System WebView其实只是一个再应用中设置好位置和大小的浏览器,而且不会放置任何花哨的UI。

在大多数情况下,除非你调用了原生API,否则不必在Android System WebView中专门测试web应用。

Android System WebView的几个常见功能使用方法

android的Android System WebView组件可以说是相当的强大,现将项目中经常用到的几个功能总结如下:

一、背景设置

Android System WebView.setBackgroundColor(0);//先设置背景色为transparent

Android System WebView.setBackgroundResource(R.drawable.yourImage);//然后设置背景图片

二、获得Android System WebView网页加载初始化和完成事件

步骤:

1、创建一个自己的Android System WebViewClient(继承 Android System WebViewClient 类)如Android System WebViewClient

2、重载里面的 onPageFinished(Android System WebView view, String url)方法,(Android System WebView加载完成会调用这个方法),这个方法放自己想要做的事情,在Android System WebView加载完成以后

3、关联你自己的Android System WebViewclient 与 Android System WebView 通过 这个方法:Android System WebView.setAndroid System WebViewClient( new Android System WebViewClient();

如果需要监视加载进度的,需要创建一个自己的WebChromeClient类,并重载方法onProgressChanged,再

布局文件:

要注意的是,其中的Android System WebView的一系列用法,比如 Android System WebView.getSettings()。setJavaScriptEnabled(true);设置可以使用javscript;

等等,具体参考API

而进度条的使用是在new出一个setWebChromeClient后,可以在内部类中写 onProgressChanged事件

总结:在Android System WebView的设计中,不是什么事都要Android System WebView类干的,有些杂事是分给其他人的,这样Android System WebView专心干好自己的解析、渲染工作就行了。

Android System WebViewClient就是帮助Android System WebView处理各种通知、请求事件的,具体来说包括:

onLoadResource

onPageStart

onPageFinish

onReceiveError

onReceivedHttpAuthRequest

WebChromeClient是辅助Android System WebView处理Javascript的对话框,网站图标,网站title,加载进度等

onCloseWindow(关闭Android System WebView)

onCreateWindow()

onJsAlert (Android System WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)

onJsPrompt

onJsConfirm

onProgressChanged

onReceivedIcon

onReceivedTitle

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持3322。

常见问题

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

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

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

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

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

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

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

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

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

loadNativeLipary首先会调用成员函数getAndroid System WebViewNativeLiparyPaths获得要加载的Chromium动态库的文件路径,然后再调用另外一个静态成员函数nativeLoadWithRelroFile对它进行加载。在加载的时候,会指定一个Chromium GNURELRO Section文件。这个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动态库了。回到前面分析的Android System WebViewFactory类的静态成员函数getProvider,它接下来继续创建一个Android System WebViewFactory。这个Android System WebViewFactory以后就可以用来创建Android System WebViewProvider。

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

从这里可以看到,Android System WebViewFactory类的静态成员函数getFactoryClass返回的Android System WebView Factory的类型为com.android.Android System WebView.chromium.Android System WebViewChromiumFactoryProviderForO。这个com.android.Android System WebView.chromium.Android System WebViewChromiumFactoryProviderForO类是由前面提到的Android System WebView Package提供的。这意味着Android System WebViewFactory类的静态成员函数getProvider创建的Android System WebView Factory是一个Android System WebViewChromiumFactoryProvider对象:

Android System 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动态库。这个Chromium动态库前面已经加载过了,因此这里通过调用System类的静态成员函数loadLipary再加载时,仅仅是只会触发它导出的函数JNIOnLoad被调用,而不会重新被加载。Chromium动态库导出的JNIOnLoad被调用的时候,Chromium动态库就会执行初始化工作:

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

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

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

软件测评

Android System WebView是Android操作系统中的一个组件,它允许Android应用程序在应用程序的用户界面内显示网页内容。它充当了一个Web浏览器引擎,负责渲染网页、执行JavaScript代码和处理其他与Web相关的功能。在Android 7.0(Nougat)之前,Android System WebView作为一个单独的应用程序捆绑在一起,并通过Google Play商店进行更新。从Android 7.0开始,Android System WebView成为一个系统组件,通过常规系统更新进行更新。

许多Android应用程序,特别是那些包含网页内容或基于Web的功能的应用程序,依赖于Android System WebView来显示网页或与Web服务进行交互。通过利用Android System WebView,开发人员可以无缝地在其应用程序中嵌入网页内容,从而创建更加集成的用户体验。通过Android System WebView显示的Web内容通常基于设备上默认的Web浏览器使用的相同渲染引擎,例如Google Chrome或Android浏览器(在Chrome成为默认浏览器之前使用的浏览器)。这样可以确保开发人员在不同的应用程序中提供一致的Web体验,并确保与Web标准和技术的兼容性。

更新日志

更新时间:2024/4/22

v125.0.6422.3版本

小错误修复和改进。

软件截图

  • Android System WebViewv125.0.6422.3
  • Android System WebViewv125.0.6422.3
  • Android System WebViewv125.0.6422.3

相关推荐

猜你喜欢

用户评论
表情 em_1 em_2 em_3 em_4 em_5 em_6 em_7 em_8 em_9 em_10 em_11 em_12 已有1条评论

(您的评论需要经过审核才能显示,请文明发言!)  

剩余字数:

点击图片更换