Android 项目集成腾讯X5浏览器内核

简介: 1、为什么要集成腾讯 X5 浏览器内核 肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因。

1、为什么要集成腾讯 X5 浏览器内核

肯定是事出有因,简单来说,JS代码写的不标准,与部分机型内嵌套的浏览器内核产生矛盾,出现底层(os)bug导致,不得不费事搞一个其它内核进行加载网页,具体原因

2、官方网站及导入 jar 包等

(1)、TBS腾讯浏览服务jar 下载地址官方接入文档

目前为止(2018/8/3),就三种。如图:


TBS sdk

我们就下载对简单第一种吧,足以满足我们的需要了。

(2)、项目内导入jar文件

解压之后,文件很多,但是有用的我感觉就是jar文件了。


解压之后

(3)、如何在自己项目内集成jar文件(基础)

第一步:将“.jar”文件考入到项目下面的libs文件夹,如图:


项目内拷入 jar 文件

第二步:在 jar 文件上右击,调出下拉菜单 ,点击下图标注的 Add As Library... 选项


第二步

第三步:选择jar 文件添加到的项目,我这里直接确定就行了:


第三步

第四步;等待Android Studio 进行同步下载,配置等等。

第五步:检查是否导入成功


第五步

3、项目实战

(1)、布局代码

布局内创建一个腾讯的 WebView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/activity_title_bar" />

    <com.tencent.smtt.sdk.WebView
        android:id="@+id/wv_task"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone" />

</LinearLayout>

(2)、 Application 内进行相关初始化操作(重要)

  @Override
    public void onCreate() {
        super.onCreate();
        //非wifi情况下,主动下载x5内核
        QbSdk.setDownloadWithoutWifi(true);
        //搜集本地tbs内核信息并上报服务器,服务器返回结果决定使用哪个内核。
        QbSdk.PreInitCallback cb = new QbSdk.PreInitCallback() {
            @Override
            public void onViewInitFinished(boolean arg0) {
                //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
            }

            @Override
            public void onCoreInitFinished() {

            }
        };
        //x5内核初始化接口
        QbSdk.initX5Environment(getApplicationContext(), cb);
    }

QbSdk.setDownloadWithoutWifi(true);:该方法默认为 false,表示为当手机内没有 X5 内核并且当为为非wifi环境,调用系统的内核,既然是调用系统自带的,那我们还集成 X5 干嘛(有毛病?太勤快了?有那时间打会王者荣耀好不)。所以,这里设置为true,但是设置为true 就会导致用那里会产生 24M 左右的流量。在当下我们身边充斥着 微信与qq,凡是有智能机就必装的软件,你没有,那没办法,花点流量吧。我个人建议设置为 true ,虽然有点流氓吧,但是没办法啊。

这里引入一下腾讯爸爸(暂且称之为爸爸)的文档哈:


有没有 很霸气侧漏

(3)、项目内使用WebView
第一步、初始化

  @BindView(R.id.wv_task)
    WebView wvTask;

第二步、激活 js 调用,设置 webView 活跃状态


    @SuppressLint("SetJavaScriptEnabled")
    @Override
    public void onResume() {
        super.onResume();
        wvTask.onResume();
        wvTask.getSettings().setJavaScriptEnabled(true);
    }

第三步、设置 WebView 的相关属性

        wvTask.getSettings().setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
        wvTask.getSettings().setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
        wvTask.getSettings().setDisplayZoomControls(true); //隐藏原生的缩放控件
        wvTask.getSettings().setBlockNetworkImage(false);//解决图片不显示
        wvTask.getSettings().setLoadsImagesAutomatically(true); //支持自动加载图片
        wvTask.getSettings().setDefaultTextEncodingName("utf-8");//设置编码格式
       
        String url="http://47.95.243.116/#/bigScreen";
        wvTask.loadUrl(url);
        Logger.d("监控界面加载的url为: " + url);

        //该界面打开更多链接
        wvTask.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String s) {
                webView.loadUrl(s);
                return true;
            }
        });
        //监听网页的加载进度
        wvTask.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView webView, int i) {
                if (i < 100 && MainTaskFragment.this.isVisible()) {
                    tvTaskProgress.setVisibility(View.VISIBLE);
                    webView.setVisibility(View.GONE);
                } else {
                    if (MainTaskFragment.this.isVisible()) {
                        tvTaskProgress.setVisibility(View.GONE);
                        webView.setVisibility(View.VISIBLE);
                    }
                }
            }
        });

这里指的说的一个事情是,腾讯的内核不支持 onPageStarted()方法,所以你如果要监听加载进度则只能在onProgressChanged进行相关切换 dialog 等操作。

相关配置,按需来就好了,我只需要上面那些;

第四步:退出界面暂停 webView的活跃,并且关闭 JS 支持


    @Override
    public void onPause() {
        super.onPause();
            wvTask.onPause();
            wvTask.getSettings().setLightTouchEnabled(false);
    }

第五步:关闭界面时,销毁webview

//销毁 放置内存泄漏
    @Override
    public void onDestroy() {
        if (this.wvTask != null) {
            wvTask.destroy();
        }
        super.onDestroy();
    }

当然了,各位小伙伴可以看一下官方demo,也可以留言问我,我懂的一定给你解答哈。对了 X5 内核支持的视频格式比原生的格式多很多。各位可以探索。马上周末了。祝大家有个好周末哈。

目录
相关文章
|
3月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
244 1
|
8天前
|
Java Linux Android开发
深入探索Android系统架构:从Linux内核到应用层
本文将带领读者深入了解Android操作系统的复杂架构,从其基于Linux的内核到丰富多彩的应用层。我们将探讨Android的各个关键组件,包括硬件抽象层(HAL)、运行时环境、以及核心库等,揭示它们如何协同工作以支持广泛的设备和应用。通过本文,您将对Android系统的工作原理有一个全面的认识,理解其如何平衡开放性与安全性,以及如何在多样化的设备上提供一致的用户体验。
|
24天前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
91 1
|
4月前
|
JavaScript 前端开发 开发工具
TypeScript的介绍,let age:number = xxx,可以直接看出数据类型,Type由微软开发,可以在任何浏览器和系统中运行,比较适合大型项目,TypeScript的安装
TypeScript的介绍,let age:number = xxx,可以直接看出数据类型,Type由微软开发,可以在任何浏览器和系统中运行,比较适合大型项目,TypeScript的安装
|
2月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
150 0
|
3月前
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
83 0
|
3月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
全面解析TensorFlow Lite:从模型转换到Android应用集成,教你如何在移动设备上轻松部署轻量级机器学习模型,实现高效本地推理
【8月更文挑战第31天】本文通过技术综述介绍了如何使用TensorFlow Lite将机器学习模型部署至移动设备。从创建、训练模型开始,详细演示了模型向TensorFlow Lite格式的转换过程,并指导如何在Android应用中集成该模型以实现预测功能,突显了TensorFlow Lite在资源受限环境中的优势及灵活性。
234 0
|
4月前
|
数据采集 数据安全/隐私保护
Kameleo指纹浏览器进阶使用:轻松集成IPXProxy海外代理IP
Kameleo是一款出色的指纹浏览器,它能够帮助用户实现隐身浏览。大家在进行网络抓取的时候总会碰到一些阻碍,而采取指纹浏览器可以提升网络抓取的效率,并且集成代理IP能增加一层防护,让数据采集更加全面,为制定营销策略提供更好的支持。那如何将Kameleo指纹浏览器与IPXProxy海外代理IP集成?
|
4月前
|
安全
全面掌握Dolphin指纹浏览器:IPXProxy代理IP集成使用指南
对于需要管理多个社交媒体或电商平台的用户而言,Dolphin指纹浏览器提供了便捷的多账号隔离功能,搭配代理IP可以有效的防止账户关联。并且Dolphin指纹浏览器能够支持团队协作,方便团队进行互动、跟踪账户、查看代理状态。一些刚接触指纹浏览器的用户,不知道如何将Dolphin指纹浏览器和代理IP集成使用,下面以IPXProxy代理IP为例,带来详细的操作步骤。
Request请求转发和重定向的资源路径问题,目录到底加不加,取决于浏览器用,还是服务器用,规避项目目录发生修改,导致重定向失败
Request请求转发和重定向的资源路径问题,目录到底加不加,取决于浏览器用,还是服务器用,规避项目目录发生修改,导致重定向失败