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

相关推荐
plainGeekDev10 小时前
工厂模式 → Hilt
android·java·kotlin
雨白10 小时前
深入理解 Kotlin 协程 (十):引而不发,探秘 Flow 冷流机制与异常透明性
android·kotlin
plainGeekDev10 小时前
Application 单例 → Hilt Singleton
android·java·kotlin
程序员码歌11 小时前
我全程用 AI开发了一款微信小游戏,上线了
android·前端·游戏开发
黄林晴12 小时前
你敢信吗?同样是跨端,KMP 跟 RN 居然差这么多!
android·前端
zbmwa14 小时前
jetpack compose 副作用 produceState
android
hunterandroid14 小时前
Android 后台任务可靠性排查:从 WorkManager 观测到失败重试闭环
android·前端
GitLqr16 小时前
Flutter FocusNode 实战指南:玩转键盘焦点与用户输入体验
android·flutter·ios
zzq779717 小时前
Android 17 升级后 System.load 报错排查与加固兼容指南
android·安全·app加固·apk加固·御盾安全·免费加固·御盾加固
酷在前行17 小时前
【R绘图】Nature Communications 半眼图复刻:分布、区间与多面板排版(保姆级教程)
android·开发语言·r语言