当前位置: 首页 > news >正文

Failed to load WebView provider: No WebView installed

1、问题

	使用webview加载网页,在应用运行时,报了如下错误:
android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installed

2、分析

	通过查看项目的修改记录,确实安装了WebView。打开cmd,执行adb shell "pm list packages | grep webview"该命令,可以看到安装的webview的包名。如图:
C:\Users\ABC1314>adb shell "pm list packages | grep webview"
package:com.google.android.webview

3、解决

系统是通过SystemImpl.java获取config_webview_packages.xml文件中定义的WebView
路径:frameworks/base/services/core/java/com/android/server/webkit/SystemImpl.java
private SystemImpl() {int numFallbackPackages = 0;int numAvailableByDefaultPackages = 0;XmlResourceParser parser = null;List<WebViewProviderInfo> webViewProviders = new ArrayList<WebViewProviderInfo>();try {parser = AppGlobals.getInitialApplication().getResources().getXml(com.android.internal.R.xml.config_webview_packages);XmlUtils.beginDocument(parser, TAG_START);while(true) {XmlUtils.nextElement(parser);String element = parser.getName();if (element == null) {break;}if (element.equals(TAG_WEBVIEW_PROVIDER)) {String packageName = parser.getAttributeValue(null, TAG_PACKAGE_NAME);if (packageName == null) {throw new AndroidRuntimeException("WebView provider in framework resources missing package name");}String description = parser.getAttributeValue(null, TAG_DESCRIPTION);if (description == null) {throw new AndroidRuntimeException("WebView provider in framework resources missing description");}boolean availableByDefault = "true".equals(parser.getAttributeValue(null, TAG_AVAILABILITY));boolean isFallback = "true".equals(parser.getAttributeValue(null, TAG_FALLBACK));WebViewProviderInfo currentProvider = new WebViewProviderInfo(packageName, description, availableByDefault, isFallback,readSignatures(parser));if (currentProvider.isFallback) {numFallbackPackages++;if (!currentProvider.availableByDefault) {throw new AndroidRuntimeException("Each WebView fallback package must be available by default.");}if (numFallbackPackages > 1) {throw new AndroidRuntimeException("There can be at most one WebView fallback package.");}}if (currentProvider.availableByDefault) {numAvailableByDefaultPackages++;}webViewProviders.add(currentProvider);}else {Log.e(TAG, "Found an element that is not a WebView provider");}}} catch (XmlPullParserException | IOException e) {throw new AndroidRuntimeException("Error when parsing WebView config " + e);} finally {if (parser != null) parser.close();}if (numAvailableByDefaultPackages == 0) {throw new AndroidRuntimeException("There must be at least one WebView package "+ "that is available by default");}mWebViewProviderPackages =webViewProviders.toArray(new WebViewProviderInfo[webViewProviders.size()]);}
查看frameworks/base/core/res/res/xml/config_webview_packages.xml文件中对使用的webview进行声明:如下
<!-- The default WebView implementation --><webviewprovider description="Android WebView" packageName="com.android.webview" availableByDefault="true"></webviewprovider>

可以看到,在该文件中声明的webview的包名是:com.android.webview,而我们通过adb命令看到系统安装的webview包名是com.google.android.webview,二者不同,导致了无法找到webview.

只需要在该xml文件中,将我们安装的webview添加进去即可。

<webviewproviders><webviewprovider description="Google WebView" packageName="com.google.android.webview" availableByDefault="true"></webviewprovider><webviewprovider description="Trichromelibrary" packageName="com.google.android.trichromelibrary" availableByDefault="true"></webviewprovider><!-- The default WebView implementation --><webviewprovider description="Android WebView" packageName="com.android.webview" availableByDefault="true"></webviewprovider>
</webviewproviders>
http://www.lryc.cn/news/449099.html

相关文章:

  • java日志框架之Log4j
  • C++ bitset(位图)的模拟实现
  • Llama 3.2:利用开放、可定制的模型实现边缘人工智能和视觉革命
  • 解决R语言bug ‘sh‘ is not recognized as an internal or external command
  • 记一次Mac 匪夷所思终端常用网络命令恢复记录
  • 2024最新!!Java后端面试题(4)看这一篇就够了!!!!
  • springboot整合sentinel和对feign熔断降级
  • 遗传算法与深度学习实战——使用进化策略实现EvoLisa
  • HttpServletRequest简介
  • c++开发之编译curl(安卓版本)
  • QT+ESP8266+STM32项目构建三部曲三--QT从环境配置到源程序的解析
  • Web APIs 5:Window对象(BOM)+本地存储
  • 神经网络(四):UNet图像分割网络
  • Java 编码系列:注解处理器详解与面试题解析
  • C语言 | Leetcode C语言题解之第441题排列硬币
  • Linux noVNC远程桌面(xfce)部署
  • 【网络安全】身份认证
  • LeetCode - #124 二叉树中的最大路径和(Top 100)
  • Java:插入排序
  • How FAR ARE WE FROM AGI?(ICLR AGI Workshop 2024)概览
  • leetcode刷题day33|动态规划Part02(62.不同路径、63. 不同路径 II、 343.整数拆分、96.不同的二叉搜索树)
  • 基于Python大数据的B站热门视频的数据分析及可视化系统
  • matlab-批处理图像质量变化并形成折线图 (PSNR)
  • [Doc][Ros2]ros2中Qos(Quality of Service,服务质量)介绍
  • SpringBoot日志集成-LogBack
  • Google BigTable架构详解
  • 【python】如何切换ipynb的kernel至指定conda环境
  • Linux【基础指令汇总】
  • SpringCloud-EurekaClient
  • 配置Scrapy项目