正确调用腾讯x5内核详解

前言

网上搜了很多腾讯内核调用的文章,不知道是不是复制的同一篇文章,内容几乎一模一样,你们真的有测试过吗?可能是一些大神不屑于写教程,一些小白搞得乱起八糟的代码,误人子弟。。
还是让我来重新写一篇吧。

测试环境

Android Studio 3.3.1
模拟器:雷电模拟器 3.48
真机设备:华为荣耀magic2,小米MAX2,小米平板4
Android版本:原生Android 5.1 MIUIAndroid 7.11 MIUIAndroid 8.1.0 EMUIAndroid 9
系统架构:x86 ARM64

测试报告

腾讯x5内核不支持x86架构的模拟器,雷电模拟器会自动调用系统内核。其他设备正常。

介绍

腾讯浏览服务是致力于优化移动端webview体验的整套解决方案。该方案由SDK、手机QQ浏览器X5内核和X5云端服务组成,解决移动端webview使用过程中出现的一切问题,优化用户的浏览体验。同时,腾讯还将持续提供后续的更新和优化,为开发者提供最新最优秀的功能和服务。

技术特性

其中,SDK是通过共享使用用户手机上微信、手机QQ、空间等软件已经下载好的X5内核,低成本实现对系统webview的替代。该SDK大小只有200+K,接入时仅需修改几行代码。
其中,X5云端服务包括云加速、云安全、云转换三大功能。云加速是通过首屏加速、智能路由、图片压缩等技术保障网页浏览的快、省、悦;云安全是通过代理加密、URL安全检测、JS黑名单管理、负载监控等防范网页被劫持插入广告、保障网页浏览的安全稳定;云转换是使用URL聚合+XPATH的解决方案,解决移动阅读难题。
其中,X5内核相对于系统webview,具有下述明显优势:

  1. 速度快:相比系统webview的网页打开速度有30+%的提升;
  2. 省流量:使用云端优化技术使流量节省20+%;
  3. 更安全:安全问题可以在24小时内修复;
  4. 更稳定:经过亿级用户的使用考验,CRASH率低于0.15%;
  5. 兼容好:无系统内核的碎片化问题,更少的兼容性问题;
  6. 体验优:支持夜间模式、适屏排版、字体设置等浏览增强功能;
  7. 功能全:在Html5、ES6上有更完整支持;
  8. 更强大:集成强大的视频播放器,支持视频格式远多于系统webview;
  9. 视频和文件格式的支持x5内核多于系统内核
  10. 防劫持是x5内核的一大亮点

为什么要用腾讯的这个内核

1.其实有很多内核可以使用,国外的内核太大,集成后项目会加20多M体积。
2.国内其他内核例如UC内核,需要开发者账号申请以及审核。
3.腾讯现在的内核,拿来就用,无需配置账号什么的。
4.第三方内核主要是对于HTML5以及ES6支持更好以及加载大网页稳定性高一点,其他的都和系统的差不多。
上述介绍,开发者集成后能无需定制能使用的只有1,4,5,7,8,9,10
不过已经够用了。

相关链接

内核首页:https://x5.tencent.com
官方文档:https://x5.tencent.com/tbs/guide/sdkInit.html
SDK地址:https://x5.tencent.com/tbs/sdk.html

准备工作

我们只需要腾讯的jar包和so文件。
下载SDK,可以去官方SKD目录下载。或者点击这儿直接下载。
这儿演示的为完整版本,不带文件功能。

开始使用

基础配置

切换Android Studio项目显示类型为Project
1.复制jar文件到项目libs目录。这个jar文件名太长了,修改文件名"tbs_sdk_thirdapp_v3.6.0.1310_43612_sharewithdownload_withoutGame_obfs_20180706_163319.jar"为"tencentx5.jar"
2.复制liblbs.so文件到项目src\main\jniLibs\armeabi目录下,没有这个目录就自行创建。

3.添加库文件。在tencentx5.jar文件右键->Add as Library
4.兼容so库。由于腾讯没做64位的SO文件,并且目前大多数手机早就64位了,所以得做兼容。官方文档写的很乱:点击查看
在app目录下找到build.gradle文件编辑(Android项目视图的打开build.gradle(Modeule:app)即可)
在android{}这一项目里面添加如下代码

ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
        }


现在库就能正常的使用了,开始写代码吧。

开始调用

1.添加权限。AndroidManifest.xml里加入权限声明:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

2.找到首页布局文件,默认是约束布局的,我改成了线性布局。其中webview的申明方式为com.tencent.smtt.sdk.WebView,需要加上包名。


<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"
    tools:context=".MainActivity">
    <com.tencent.smtt.sdk.WebView
        android:id="@+id/tencent_webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    com.tencent.smtt.sdk.WebView>
LinearLayout>

3.首次使用需要初始化,会从网络下载内核。不管是和QQ,微信共享还是从网络下载,都需要联网。
加载方式可以选择预加载方式,不过要不要这个预加载都可以,只要调用的时候就会自动去下载内核,为了用户体验,可以先预加载。
预加载需要在清单文件申明类名称,
找到AndroidMnifest.xml文件,在application节点下添加android:name=".App",其中App文件为类文件,你可以创建一个名为App的java文件。代码如下:


import android.app.Application;
import com.tencent.smtt.sdk.QbSdk;
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        initX5();
    }
    private void initX5() {
        QbSdk.initX5Environment(getApplicationContext(), new QbSdk.PreInitCallback() {
            @Override
            public void onViewInitFinished(boolean arg0) {
                //x5內核初始化完成的回调,为true表示x5内核加载成功,否则表示x5内核加载失败,会自动切换到系统内核。
            }
            @Override
            public void onCoreInitFinished() {
            }
        });
    }
}

其实上述代码可以不需要。使用的时候反正会自动去查的。
开始调用代码:

        mWebView = findViewById(R.id.tencent_webview);
        if (mWebView.getX5WebViewExtension() != null) {
            Toast.makeText(getApplicationContext(), "开启成功", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getApplicationContext(), "开启失败", Toast.LENGTH_SHORT).show();
        }
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.loadUrl("http://debugtbs.qq.com");
        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String s) {
                mWebView.loadUrl(s);
                return true;
            }
        });

使用方法和系统的webview一样,不过导入包一定不要导入错了,腾讯的包叫com.tencent.smtt.sdk.WebView
其中可以使用方法mWebView.getX5WebViewExtension()判断是否载入成功了内核,返回不为null则为载入成功。
打开的页面为腾讯x5调试地址,可以自己进行调试。


内核成功调用了,长按文字会显示复制和翻译按钮。那个水滴类型选择器,所有系统制内容也是这样的,不知道哪个小白说的x5内核调用成功了就是水滴复制按钮。

系统内核长按复制会显示这个,每个系统的按钮不一样

后面使用方法基本和系统的一样了,网页视频以及文件选择,以后用到了再补充吧。

你可能感兴趣的:(android)