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 秒钟,对我来说是一个激励,感谢。

相关推荐
stevenzqzq5 小时前
android中dp和px的关系
android
一一Null7 小时前
Token安全存储的几种方式
android·java·安全·android studio
JarvanMo7 小时前
flutter工程化之动态配置
android·flutter·ios
时光少年10 小时前
Android 副屏录制方案
android·前端
时光少年10 小时前
Android 局域网NIO案例实践
android·前端
alexhilton10 小时前
Jetpack Compose的性能优化建议
android·kotlin·android jetpack
流浪汉kylin10 小时前
Android TextView SpannableString 如何插入自定义View
android
火柴就是我12 小时前
git rebase -i,执行 squash 操作 进行提交合并
android
你说你说你来说13 小时前
安卓广播接收器(Broadcast Receiver)的介绍与使用
android·笔记
你说你说你来说13 小时前
安卓Content Provider介绍及使用
android·笔记