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

相关推荐
阿巴斯甜21 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker21 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇2 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_2 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android