項目中的老機器使用webview 無法加載vue3打包的網頁,只能用獨立的webview內核,采用靜態加載x5內核的方式, 以下內容轉自簡書作者漆先生的博客,僅用作備份記錄
之前在項目中在線集成的X5內核,但是效果不好,只有手機設備這種裝過微信QQ的機器加載成功的概率才比較理想,其它工程機器基本都是失敗的,因此考慮靜態集成到項目里邊。
一、獲取X5內核的方法
打開調試頁,安轉內核,logcat過濾:PLUGIN-TbsDownloadDebugPlugin ,可以看到下載鏈接
參考文章:https://blog.csdn.net/qq_34205629/article/details/122375262#comments_20014428
二、拷貝內核
拷貝到assets目錄下,初始化的時候再拷貝到cache目錄下,其它目錄也可
1.拷貝方法
public static String getAssetsCacheFile(Context context, String fileName) {File cacheFile = new File(context.getCacheDir(), fileName);try {InputStream inputStream = context.getAssets().open(fileName);try {FileOutputStream outputStream = new FileOutputStream(cacheFile);try {byte[] buf = new byte[1024];int len;while ((len = inputStream.read(buf)) > 0) {outputStream.write(buf, 0, len);}} finally {outputStream.close();}} finally {inputStream.close();}} catch (IOException e) {e.printStackTrace();}return cacheFile.getAbsolutePath();
}
三、安裝本地內核
根據系統abi選擇32位和64位的tbs內核,安裝本地內核并初始化,
private fun initX5() {if (QbSdk.getTbsVersion(applicationContext) == 0) {Logger.i(TAG, "Install")val phoneCpus = Build.SUPPORTED_ABISvar fileName = ""if (phoneCpus[0] == "arm64-v8a") {fileName = "046007_x5.tbs.apk"Log.i(TAG, "64bit $fileName")} else if (phoneCpus[0] == "armeabi-v7a") {fileName = "045912_x5.tbs.apk"Log.i(TAG, "32bit $fileName")}if (fileName.isBlank()) {Log.i(TAG, "no support")initX5Setting()}val newPath = FileUtil.getAssetsCacheFile(applicationContext, fileName)Log.i(TAG, "path $newPath")QbSdk.reset(applicationContext)QbSdk.installLocalTbsCore(applicationContext, fileName.substring(0, fileName.indexOf("_")).toInt(), newPath)QbSdk.setTbsListener(object : TbsListener {override fun onDownloadFinish(i: Int) {}override fun onInstallFinish(i: Int) {Logger.i(TAG, "onInstallFinish: $i")initX5Setting()}override fun onDownloadProgress(i: Int) {}})} else {Logger.i(TAG, "onlyInit")initX5Setting()}
}private fun initX5Setting() {//避免第一次打開需要安轉X5,設置的的監聽導致內存泄漏,重置為nullQbSdk.setTbsListener(null)val map = HashMap<String, Any>(2)map[TbsCoreSettings.TBS_SETTINGS_USE_SPEEDY_CLASSLOADER] = truemap[TbsCoreSettings.TBS_SETTINGS_USE_DEXLOADER_SERVICE] = trueQbSdk.initTbsSettings(map)Logger.i(TAG, "canLoadX5: ${QbSdk.canLoadX5(applicationContext)}|TbsVersion:" + QbSdk.getTbsVersion(applicationContext))
}
四、內核地址
32位(45912)
鏈接:https://pan.baidu.com/s/1pz_HSnzdzvEQ9RI5ohOVQg
提取碼:ad9l
64位(46007)
鏈接:https://pan.baidu.com/s/1E1wgW1-ztHDg5xANDcePog
提取碼:sil3
備份下載
32位(45912)鏈接: https://pan.baidu.com/s/1MAJpPkTjtFY1gqz9myuYsw 提取碼: 5v3r?
64位(46007)鏈接: https://pan.baidu.com/s/1WmXGBjWb5yTGGPfF2Z_Qcw 提取碼: 3p5e?