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

相关推荐
Yang-Never4 小时前
Kotlin协程 -> Job.join() 完整流程图与核心源码分析
android·开发语言·kotlin·android studio
一笑的小酒馆9 小时前
Android性能优化之截屏时黑屏卡顿问题
android
懒人村杂货铺12 小时前
Android BLE 扫描完整实战
android
TeleostNaCl14 小时前
如何安装 Google 通用的驱动以便使用 ADB 和 Fastboot 调试(Bootloader)设备
android·经验分享·adb·android studio·android-studio·android runtime
fatiaozhang952715 小时前
中国移动浪潮云电脑CD1000-系统全分区备份包-可瑞芯微工具刷机-可救砖
android·网络·电脑·电视盒子·刷机固件·机顶盒刷机
2501_9159184116 小时前
iOS 开发全流程实战 基于 uni-app 的 iOS 应用开发、打包、测试与上架流程详解
android·ios·小程序·https·uni-app·iphone·webview
lichong95116 小时前
【混合开发】vue+Android、iPhone、鸿蒙、win、macOS、Linux之dist打包发布在Android工程asserts里
android·vue.js·iphone
Android出海16 小时前
Android 15重磅升级:16KB内存页机制详解与适配指南
android·人工智能·新媒体运营·产品运营·内容运营
一只修仙的猿16 小时前
毕业三年后,我离职了
android·面试
编程乐学16 小时前
安卓非原创--基于Android Studio 实现的新闻App
android·ide·android studio·移动端开发·安卓大作业·新闻app