Android免安装升级系统WebView内核探索

这篇具有很好参考价值的文章主要介绍了Android免安装升级系统WebView内核探索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

Android5.0以后WebView升级需要去Google Play安装APK(图一),就算安装了以后也不一定能行,像华为、Amazon等特殊机型WebView的Chromium版本一般比较低,只能用它自己的WebView无法用Google的WebView(图二)。

com.huawei.webview 版本对应 hwschromium,android,华为,webview

com.huawei.webview 版本对应 hwschromium,android,华为,webview

华为机上WebView内核的Chromium版本低于107无法播放H265视频,为了解决上述问题可以用JS实现H265播放,但是会比较卡,也可以用腾讯的X5内核,但是免费版实际chromium版本是89不支持H265视频,这个时候我就想能不能用App内的WebView APK作为内核,下图是升级WebView内核的前后效果对比

com.huawei.webview 版本对应 hwschromium,android,华为,webview

升级前在华为机上的系统WebView内核包名是com.huawei.webview,版本是14.0.0.331,UserAgent中的Chromium实际版本是99.0.4844.88,如下图所示小于107不支持H265播放

com.huawei.webview 版本对应 hwschromium,android,华为,webview

把WebView内核的包名、版本、包地址传到以下代码升级内核成功后就可以播放H265视频了

com.huawei.webview 版本对应 hwschromium,android,华为,webview

WebView内核选择页面如下图所示

com.huawei.webview 版本对应 hwschromium,android,华为,webview

升级成功后WebView内核的包名变成了com.google.android.webview,UserAgent中的Chromium实际版本也变成了122.0.6261.64

com.huawei.webview 版本对应 hwschromium,android,华为,webview

项目地址:WebViewUpgrade,这个项目是为了解决WebView碎片化而产生,当前处于测试阶段,如果你觉得有所收获,给这个库点个赞吧,你的鼓励是我前进最大的动力,

兼容性

Android的设备五花八门,已测试以下功能和机型

功能特性

WebView包名 系统版本
com.google.android.webview 122.0.6261.64
com.android.webview 113.0.5672.136
com.huawei.webview 14.0.0.331
com.android.chrome 122.0.6261.43
com.amazon.webview.chromium 118-5993-tv.5993.155.51

机型

厂商 系统版本
华为Mate30 12
小米10 11
VIVO NEX A 10
OPPO FIND X5 14

原理介绍

com.huawei.webview 版本对应 hwschromium,android,华为,webview

其实原理很简单,从上图中可以看到WebView初始化的时候会根据WebViewProviderResponse(WebViewUpdateService调用waitForAndGetProvider)和PackageInfo(PacakgeManagerService调用getPackageInfo)生成WebViewFactoryProivder,也就是说只要hook这两个方法就行,替换WebViewUpdateService和PacakgeManagerService的调用很简单,其实就是替换Binder的本地接口调用,网上方案很多就不展开了,如果不清楚的可以直接看代码。

替换waitForAndGetProvider值得注意的是WebViewProviderResponse对象的packageInfo查询时flags要设置成GET_SHARED_LIBRARY_FILES|GET_SIGNATURES|GET_META_DATA,后续代码中会用这些数据,不然会崩溃。
com.huawei.webview 版本对应 hwschromium,android,华为,webview

替换getPackageInfo值得注意的是

  1. getPackageArchiveInfo查询未安装Apk的PackageInfo
  2. 有些APK加上GET_SIGNATURES查询PackageInfo会找不到
  3. getPackageArchiveInfo查询出来的PackageInfo不存在nativeLibraryDir,需要手动赋值
  4. nativeLibraryDir传入的so路径需要运行时处理器指令集的ABI一样,不然会崩溃
  5. 部分手机的packageInfo.applicationInfo.sourceDir不存在,需要手动赋值

com.huawei.webview 版本对应 hwschromium,android,华为,webview

有两个功能还没实现,希望有了解的朋友能提交代码解决这两个问题。

  1. 运行时动态切换WebView内核,现在只能在WebView未初始化之前替换,原因是因为会报错UnsatisfiedLinkError: Shared library "/system/lib64/libwebviewchromium_plat_support.so" already opened by ClassLoader,WebView内核中会调用System.loadLibrary加载libwebviewchromium_plat_support.so,而系统限制同一个so只能被一个classLoader加载。

  2. 不支持多进程功能,如果把WebViewUpdateService的isMultiProcessEnabled设为true,会报错java.lang.RuntimeException: Illegal meta data value: the child service doesn't exist, 就算把这个错误解决了,也无法用Process.startWebView手动启动WebViewZygote进程文章来源地址https://www.toymoban.com/news/detail-843872.html

到了这里,关于Android免安装升级系统WebView内核探索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://blog.csdn.net/weixin_53290519/article/details/136394547

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信升级后不再使用x5内核,debugx5.qq.com打不开,如何开启微信调试?

    微信版本升级后,不再使用x5内核(升级为了xweb内核),原有的通过debugx5.qq.com开启微信调试的方式不再生效,无法打开vConsole查看页面请求等信息。 话不多说,直接说如何开启微信下调试 手机用usb连接至电脑(注意选择传输文件/调试模式,且手机需要开启usb调试,具体如何

    2024年02月02日
    浏览(9)
  • linux|操作系统|centos7物理机安装网卡驱动8188gu(内核升级,firmware固件,USB设备管理,module管理)

    目前服务器领域centos7基本是主流的操作系统,而linux相对于Windows来说,软硬件方面的支持是差很多的,在硬件方面来说,以一个免驱的网卡为例,window xp可能不会自动识别到,但Windows10基本都会自动识别到,简简单单的即插即用。根本原因在Windows随着版本的升级,内置的各

    2024年01月20日
    浏览(20)
  • 探索操作系统:内核、启动和系统调用的奥秘

    首先,对于有科班背景的读者,可以跳过本系列文章。这些文章的主要目的是通过简单易懂的汇总,帮助非科班出身的读者理解底层知识,进一步了解为什么在面试中会涉及这些底层问题。否则,某些概念将始终无法理解。这些计算机基础文章将为你打通知识的任督二脉,祝

    2024年02月11日
    浏览(10)
  • Linux系统之升级内核版本方法

    确保yum仓库的正常,本次实践用的是阿里的镜像源。 直接更新内核版本,此方法适用于更新内核补丁。 重启服务器 检查内核版本 重启完成,发现内核版本已经升级为【3.10.0-1160.83.1.el7.x86_64】 ELRepo是一个为Linux提供驱动程序和内核映像的存储库,这里的内核大版本升级方案就

    2024年02月06日
    浏览(20)
  • ubuntu20.04安装升级内核版本

    https://blog.csdn.net/inthat/article/details/121682317 下载ubuntu-mainline-kernel脚本 将脚本放在可执行路径中 安装指定内核版本 或安装最新内核版本 查看最新内核版本 安装最新版本 如果想要 卸载 安装的最新版本,运行 重启后查看当前内核版本 注意 :如果更换内核后无法开机,请在gr

    2024年02月07日
    浏览(7)
  • centos系统kernel内核安全离线升级

    系统漏洞扫描,扫描出以下的漏洞信息 漏洞版本如下: 1.Linux kernel 5.2.10之前版本中的drivers/hid/usbhid/hiddev.c驱动程序存在资源管理错误漏洞 2.Linux kernel 4.20之前版本中存在竞争条件问题漏洞 3.Linux kernel 4.1版本至4.x版本和5.0.8之前的5.x版本中存在信息泄露漏洞 4.Linux kernel 5.1.9之前

    2024年02月05日
    浏览(15)
  • HUAWEI MateBook X Pro升级2T SSD并保留一键恢复功能

           手上一台 MateBook X Pro2020款笔记本,SSD为512G, 用了几年,随着时间的推移,硬盘空间慢慢不够用了,系统分区与用户分区在WIN10系统下都显示为红色警告,因此有了升级SSD的想法。        上网查了很多资料,大多数都有提到MateBook X Pro最大只支持1T SSD,去到华为的

    2024年02月06日
    浏览(13)
  • uniapp手机APP webview使用echarts显示问题(腾讯X5内核)

    一、问题描述 webview页面中引用了一些基于echarts封装的js文件,用于在手机上展示仪表盘 在iQOO8 pro上显示并无问题,而在vivo x21A上显示有问题,如下图所示 vivo x21A iQOO8 pro 二、解决过程 先说结论,出现这个问题是因为echarts和手机浏览器内核不兼容,webview组件默认使用的是手

    2024年02月09日
    浏览(17)
  • VBS加载微软网页控件webview2(Edge-Chromium谷歌内核)

    VBS加载微软网页控件webview2(Edge-Chromium谷歌内核) VBA加载Webview2浏览器内核 代替了ie的webbrowser控件,效果类似: 资源:VBS加载webview2控件代替ie的webbrowser(Edge-Chromium谷歌内核)资源-CSDN文库 VBS loads the Microsoft web control webview2 (edge ​​Google kernel)Instead of the webbrowser control of ie, the e

    2024年02月06日
    浏览(9)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包