Android 10 WebView 踩坑实录

项目要求支持 8K 高清视频(H265编码)播放,拿到板子后却发现使用 App 可以播放 8K 高清视频,但使用浏览器却不行,即使安装上最新的 Chrome for Android 也不行。根据以往的浏览器内核开发经验,在 Android 平台上,Chromium WebView 最终是调用系统框架层的 MediaPlayer 进行播放。理论上只要系统框架层能够支持 8K 高清播放,那么浏览器应该也支持。实际情况却并非如此,而且 Android 10 预编译 WebView 没任何日志输出,所以需要下载源码编译 Chromium WebView,找出问题所在。

版本选择坑

Chromium 源码更新非常平凡,而且架构也经常变化,不像我们做项目,一套代码恨不得修修补补用上十几年。上一个项目是基于 Chromium V53 进行定制的,这次并不想采用最新的 Chromium 版本,大概浏览了一下最新源码,和 V53 差别太大,以往的定制工作要移植过来相当麻烦。首先想到的是直接使用 V53 的源码,但无法应用到 Android 10 上,主要是 Android 10 的 WebView API 接口发生了一些变化。最终令我放弃的是 Android 10 框架层移除了 HardwareCanvas 类,要知道,在 Android 5.1 中,WebView 中有一个重要的绘制方法:

public void callDrawGlFunction(Canvas canvas, long nativeDrawGLFunctor) {
    if (!(canvas instanceof HardwareCanvas)) {
        // Canvas#isHardwareAccelerated() is only true for subclasses of HardwareCanvas.
        throw new IllegalArgumentException(canvas.getClass().getName()
                + " is not hardware accelerated");
    }
    ((HardwareCanvas) canvas).callDrawGLFunction2(nativeDrawGLFunctor);
}

不能使用 V53,接下来考虑 Android 10 中预编译的 Chromium Webview 版本,使用 WebView Shell,查看版本号为 74.0.3729.183:

fef94afd68ba48136a75214439787643.png

然而,这里有一个巨大的坑。等我费了九牛二虎之力把代码下载下来,把 Chromium WebView 编译出来并安装到系统,结果浏览器启动就崩溃,查看系统日志,有如下错误信息:

03-05 00:41:09.457  3299  4011 W WebViewUpdater: creating relro file timed out
03-05 00:41:09.458 12565 12565 E WebViewFactory: Chromium WebView package does not exist
03-05 00:41:09.458 12565 12565 E WebViewFactory: android.webkit.WebViewFactory$MissingWebViewPackageException: Failed to load WebView provider: No WebView installed
03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.webkit.WebViewFactory.getWebViewContextAndSetProvider(WebViewFactory.java:339)
03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.webkit.WebViewFactory.getProviderClass(WebViewFactory.java:402)
03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.webkit.WebViewFactory.getProvider(WebViewFactory.java:252)
03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.webkit.WebView.getFactory(WebView.java:2551)
03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.webkit.WebView.setWebContentsDebuggingEnabled(WebView.java:1974)
03-05 00:41:09.458 12565 12565 E WebViewFactory:        at org.chromium.webview_shell.WebViewBrowserActivity.onCreate(WebViewBrowserActivity.java:230)
03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.app.Activity.performCreate(Activity.java:7802)
03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.app.Activity.performCreate(Activity.java:7791)
03-05 00:41:09.458 12565 12565 E WebViewFactory:        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1306)
03-05 00:41:09.458 12565 12565 E WebViewFactory:        a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云水木石

但行好事,莫问前程

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值