网上搜了很多腾讯内核调用的文章,不知道是不是复制的同一篇文章,内容几乎一模一样,你们真的有测试过吗?可能是一些大神不屑于写教程,一些小白搞得乱起八糟的代码,误人子弟。。
还是让我来重新写一篇吧。
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.其实有很多内核可以使用,国外的内核太大,集成后项目会加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内核调用成功了就是水滴复制按钮。
系统内核长按复制会显示这个,每个系统的按钮不一样
后面使用方法基本和系统的一样了,网页视频以及文件选择,以后用到了再补充吧。