X5内核为旧版安卓系统添加浏览器兼容

序言

最近在webview上做兼容,发现了一个原生浏览器不兼容新版本vue3的语法了,导致了

无法渲染,这不,又出现了这个库

源码

地址

特点

  • 本地化加载内核,当然啦,也可以加个下载业务代码,就可以实现线上下载了,然后安装到本地,
  • 支持kotlin版本 和 compose版本

使用

这里主要是贴一下主要代码

拿kotlin 版本来做例子

kotlin 复制代码
private fun loadInstall() {

    //判断内核是否存在
    if (!QbSdk.canLoadX5(this)) {
        val dialog = showProgressDialog(this)
            //执行安装业务
        startInstallX5LocationCore(this, onSucceed = {
            Log.e("xx", "QbSdk. 安装成功")
            dialog.dismiss()
            runOnUiThread {
                restartApp()
            }
        }, onFailed = {
            Log.e("xx", "QbSdk. 安装失败    ${it}")
            runOnUiThread {
                dialog.dismiss()
                Toast.makeText(this@SplashActivity, it, Toast.LENGTH_SHORT).show()
            }
        })

    } else {
        Toast.makeText(this@SplashActivity, "已经安装内核", Toast.LENGTH_SHORT).show()
    }
} 

startInstallX5LocationCore 是封装好的方法,

kotlin 复制代码
fun startInstallX5LocationCore(
    context: AppCompatActivity,
    onSucceed: () -> Unit,
    onFailed: (String) -> Unit
) {
    val num = 20
    val index = intArrayOf(0)
    val CORE_VERSION = 44286 //内核版本号 
    val CORE_NAME = if (is32BitAbi(context)) "tbs_core_046270_20230713164840_nolog_fs_obfs_armeabi_release.tbs" else "tbs_core_046281_20240119145442_nolog_fs_obfs_arm64-v8a_release.tbs" //内核文件名称
    val path = context.filesDir.parent //存储路径
    val fileFolder = "tbs" 
    try { 
        //复制X5tbs下的内核文件到终端
        val isExitCore: Boolean = copyAssetsToDir(context, fileFolder, path, onProgress = {
        })
        if (isExitCore) {
            val installPath = path + File.separator + fileFolder + File.separator + CORE_NAME
            Log.d("X5", "安装内核地址:$installPath")
            //开始安装
            QbSdk.installLocalTbsCore(context, CORE_VERSION, installPath)
            val timer = Timer()
            timer.schedule(object : TimerTask() {
                override fun run() {
                    QbSdk.initX5Environment(context, object : PreInitCallback {
                        override fun onCoreInitFinished() {
                            Log.d("X5", "onCoreInitFinished")
                        }

                        override fun onViewInitFinished(p0: Boolean) {
                            Log.d("X5", "onViewInitFinished_p0=$p0")
                        }
                    })
                    val version = QbSdk.getTbsVersion(context)
                    if (version > 0) {
                        Log.d("X5", "x5内核安装完成,版本号$version")
                        timer.cancel()
                        onSucceed()
                    } else {
                        Log.d("X5", "循环检验内核版本 " + version + ",计数:" + index[0])
                        index[0]++
                        //老式的系统版本,例如7.0 8.0这些配置较低的写入比较慢,估需要等待
                        if (index[0] > num) {
                            Log.d("X5", "超过" + num + "s")
                            timer.cancel()
                            onFailed("超过" + num + "s,取消安装")
                        }
                    }
                }
            }, 0, 1000)
        }
    } catch (e: java.lang.Exception) {
        e.printStackTrace() 
        onFailed("本地离线内核安装异常,异常信息:" + e.message)
    }
}

上面代码 把asset目录下的文件,复制到包下的内部文件目录,执行QbSdk.installLocalTbsCore 进行安装 ,而timer这个方法是为了低配的手机做的兼容,有些手机内存或者CPU快被拉满的时候会导致安装失败

debugx5.qq.com 是内核检测和安装内核页面,也是腾讯x5内核debug页

我们一起看看效果吧

结束语

如果本文对你有帮助,请转发让更多的朋友阅读。

也许这个操作只要你 3 秒钟,对我来说是一个激励,感谢。

相关推荐
似霰5 小时前
AIDL Hal 开发笔记2----AIDL HAL 实例分析light hal
android·framework·hal
—Qeyser5 小时前
Flutter 颜色完全指南
android·flutter·ios
2501_916008896 小时前
iOS 上架需要哪些准备,账号、Bundle ID、证书、描述文件、安装测试及上传
android·ios·小程序·https·uni-app·iphone·webview
摘星编程8 小时前
React Native for OpenHarmony 实战:DatePickerAndroid 日期选择器详解
android·react native·react.js
花卷HJ10 小时前
Android 沉浸式全屏实践:主题 + 状态栏文字颜色完整方案
android
花卷HJ11 小时前
Android 项目中 BaseActivity 封装实践(支持 ViewBinding、PermissionUtils动态权限、加载弹窗和跳转动画)
android
消失的旧时光-194313 小时前
Android 接入 Flutter(Add-to-App)最小闭环:10 分钟跑起第一个混合页面
android·flutter
城东米粉儿13 小时前
android StrictMode 笔记
android
Zender Han13 小时前
Flutter Android 启动页 & App 图标替换(不使用任何插件的完整实践)
android·flutter·ios
童无极13 小时前
Android 弹幕君APP开发实战01
android