关于TBS内置TbsReaderView mTbsReaderView方式打开文档 x5 内核无法下载问题

在用TBS内置方式加载x5内核一直下裁不了,一直报如下错。

下载内核代码

 /**
     * 初始化腾讯sdk
     */
    private void initTBS(final Context applicationContext){
        //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
        //该方法默认为 false,表示当手机内没有 X5 内核并且为非wifi环境,允许下载x5内核
        //QbSdk.setDownloadWithoutWifi(true);
        QbSdk.setTbsListener(
                new TbsListener() {
                    @Override
                    public void onDownloadFinish(int i) {
                        //下载结束时的状态,下载成功时errorCode为100,其他均为失败,外部不需要关注具体的失败原因
                        Log.e("QbSdk", "onDownloadFinish -->下载X5内核完成:" + i);
                        if (i !=100){
                            Log.e("QbSdk", "progress -->下载X5内核完成:" + i);
                            TbsDownloader.startDownload(applicationContext);
                        }
                    }

                    @Override
                    public void onInstallFinish(int i) {
                        //安装结束时的状态,安装成功时errorCode为200,其他均为失败,外部不需要关注具体的失败原因
                        Log.e("QbSdk", "onInstallFinish -->安装X5内核进度:" + i);
                    }

                    @Override
                    public void onDownloadProgress(int i) {
                        //下载过程的通知,提供当前下载进度[0-100]
                        Log.e("QbSdk", "onDownloadProgress -->下载X5内核进度:" + i);
                    }
                });
        QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {

            @Override
            public void onViewInitFinished(boolean arg0) {
                //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
                Log.e(TAG, " 加载内核是否成功 " + arg0);
                if(!arg0){
                    Toast.makeText(getApplicationContext(),"X5内核加载失败,请确保网络连接正常,尝试重新启动应用",Toast.LENGTH_LONG).show();
                }else{
                    int version=QbSdk.getTbsVersion(getApplicationContext());
                    Log.e(TAG, "内核版本号: " + version);
                }


            }

            @Override
            public void onCoreInitFinished() {
                //x5内核初始化完成回调接口,此接口回调并表示已经加载起来了x5,有可能特殊情况下x5内核加载失败,切换到系统内核。
            }
        };
        //x5内核初始化接口
        QbSdk.initX5Environment(getApplicationContext(),  cb);


    }

无法更新

一直报无法下载内核com.esafenet.imt W/System.err: java.net.ConnectException: Failed to connect to cfg.imtt.qq.com/223.75.236.241:443

2021-11-20 18:01:55.291 27148-27282/com.esafenet.imt W/System.err: java.net.ConnectException: Failed to connect to cfg.imtt.qq.com/223.75.236.241:443
             2021-11-20 18:01:55.291 27148-27282/com.esafenet.imt W/System.err: java.net.ConnectException: Failed to connect to cfg.imtt.qq.com/223.75.236.241:443
             2021-11-20 18:02:11.359 27534-27556/com.esafenet.imt W/System.err: java.net.ConnectException: Failed to connect to cfg.imtt.qq.com/223.75.236.241:443
             2021-11-20 18:02:11.359 27534-27556/com.esafenet.imt W/System.err: java.net.ConnectException: Failed to connect to cfg.imtt.qq.com/223.75.236.241:443

通过网上改配置方法,一直没用,如下图

 下载内核还一直报错

W/System.err: java.net.SocketTimeoutException: failed to connect to cfg.imtt.qq.com/223.75.236.241 (port 80) from /192.168.1.64 (port 40826) after 20000ms
     W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:191)
             at libcore.io.IoBridge.connect(IoBridge.java:135)
     W/System.err:     at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
             at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
     W/System.err:     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
             at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
             at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
     W/System.err:     at java.net.Socket.connect(Socket.java:621)
             at com.android.okhttp.internal.Platform.connectSocket(Platform.java:182)
             at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:145)
     W/System.err:     at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
             at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
     W/System.err:     at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
             at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
             at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)

解决方法

直接下载最新的x5内核包,包下载地址

关于TBS内置TbsReaderViewmTbsReaderView方式打开文档x5内核无法下载问题,压缩包-互联网文档类资源-CSDN下载

在项目启动的时候,直接将包copy到项目文件夹中,完美解决x5内核问题,不用再在线下载内核包了。

在app启动的时候调用

 FileUtils.copyAssetsTBS(getApplicationContext(), "TBS", "/data/user/0/com.xx.xx/app_tbs/");

copyAssetsTBS方法:

 public static void copyAssetsTBS(Context context, String oldPath, String newPath) {
             try {
                 String fileNames[] = context.getAssets().list(oldPath);// 获取assets目录下的所有文件及目录名
                 if (fileNames.length > 0) {// 如果是目录
                     File file = new File(newPath);
                     file.mkdirs();// 如果文件夹不存在,则递归
                     for (String fileName : fileNames) {
                         copyAssetsTBS(context, oldPath + "/" + fileName, newPath + "/" + fileName);
                     }
                 } else {// 如果是文件
                     InputStream is = context.getAssets().open(oldPath);
                     FileOutputStream fos = new FileOutputStream(new File(newPath));
                     byte[] buffer = new byte[1024];
                     int byteCount;
                     while ((byteCount = is.read(buffer)) != -1) {// 循环从输入流读取
                         // buffer字节
                         fos.write(buffer, 0, byteCount);// 将读取的输入流写入到输出流
                     }
                     fos.flush();// 刷新缓冲区
                     is.close();
                     fos.close();
                 }
             } catch (Exception e) {
                 e.printStackTrace();
             }
         }

截图

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Android TBS 内核加载失败的问题有很多种可能原因,下面我列举一些可能会导致 TBS 内核加载失败的问题: 1. 检查是否已经添加了 TBS 内核依赖库。在 app 的 build.gradle 文件中添加如下代码: ``` implementation 'com.tencent.tbs.tbssdk:sdk:xxx' ``` 其中 xxx 是 TBS 内核版本号。如果没有添加依赖库,TBS 内核无法加载。 2. 检查是否已经获取了网络权限。因为 TBS 内核需要从网络上下载一些必要的文件,如果应用没有获取网络权限,TBS 内核无法加载。 3. 检查是否已经初始化了 TBS 内核。在应用的 Application 类中添加以下代码: ``` QbSdk.initX5Environment(getApplicationContext(), cb); ``` 这里的 cb 是一个回调函数,用来检查 TBS 内核是否加载成功。如果没有正确初始化 TBS 内核TBS 内核无法加载。 4. 检查是否已经升级了 TBS 内核。有时候,TBS 内核版本过低也会导致加载失败。可以尝试升级 TBS 内核到最新版本。 5. 检查是否已经适配了 64 位手机。如果应用没有适配 64 位手机,TBS 内核无法加载。可以在 app 的 build.gradle 文件中添加如下代码: ``` ndk { abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' } ``` 这里的 abiFilters 表示需要适配的 CPU 架构。如果不适配 64 位手机,TBS 内核无法在 64 位手机上加载。 希望以上方法能够帮助你解决 Android TBS 内核加载失败的问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拼命小孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值