由于X5内核打包后有30多M,x5官网文档也着重提醒:“由于内核体积较大,官网SDK默认为静默下载方案,首次使用需要在网络中静默下载约30M的内核,可能存在一定的加载失败率,目前线上加载成功率约为90%。如果您有业务需要强依赖X5内核相关功能,请使用静态集成方式进行集成”。

当某些特殊app必须可靠加载X5内核时(非普通用户使用,没有装微信),等待网络慢慢下载还不一定成功,那就太废了;似乎静态集成给了一条活路。

关键就在于这个“静态集成”,整个x5官网,除了常见问题中有提到,其他任何地方都找不到如何静态集成,更找不到SDK;后面发现是早年有提供文档和下载,不过后面就关闭了,文档也删了;也许是用的人多,又不挣钱,KPI下的产物吧,没利谁给你免费维护。

经过搜罗历史资料(GitHub搜代码真稳的一比),结合下载到的老版本静态集成SDK,经过一番摸索,实现了:用老版本的jar + 最新的TBS X5内核,进行静态集成,将内核直接打包进APK。

前情提要

本篇文章只针对X5内核的静态集成,将30多M内核直接打包进Apk,TBS X5官网已经没有相关资料了;如果你不是要把内核打包进Apk,请直接阅读官网 https://x5.tencent.com/ 文档就行了,不用折腾。

第一步:下载老版本SDK得到jar

获取SDK

当前时间:2020-08-07,能找到的最新的一个静态集成SDK,看里面文件名时间是2017-10-11,虽然老了点,但是能用来加载最新的X5内核,没有问题。

老版本SDK下载地址:http://soft.tbs.imtt.qq.com/17421/tbs_res_imtt_tbs_release_integrateWithX5core_43500SDK_43656Core.zip

下载后,只需要提取里面的tbs_sdk_thirdapp_v3.5.0.1063_43500_staticwithdownload_withoutGame_obfs_20171011_195714.jar,另外一个apk文件是内核(这个内核太老,就不要了)。

如果上面地址失效了,我在github里面存了一份jar,地址:

https://github.com/xiangyuecn/Docs/blob/master/H5/静态集成腾讯TBS X5内核WebView,从微信提取新版30M浏览器内核打包进apk_files/tbs_sdk_thirdapp_v3.5.0.1063_43500_staticwithdownload_withoutGame_obfs_20171011_195714.jar

集成SDK

把得到的这个tbs_sdk_*.jar copy到项目的libs目录中(如果你已经导入了新版的tbs_sdk_*.jar,把新版删掉就行,它们没有QbSdk.preinstallStaticTbs静态内核加载方法)。

这样SDK就集成好了(见文末图),此时就算不集成静态内核也能正常运行,就是x5加载不太稳定。

步骤二、下载提取最新TBS X5内核

有两种方法,一个是从微信里面提取;另外一个就是app内访问tbs调试页面,然后安装新内核,再提取。

方法1:从微信中提取

微信中打开http://debugtbs.qq.com,进入界面后点击拷贝内核按钮,会弹出保存的路径(参考顶上【图3】),打开这个路径后提取里面的core_private/x5.debug.tbs这个文件,其实这个是一个apk/zip文件,30多M,解压后得到一堆so和jar等文件,先复制出来再说,文件名加一个zip后缀。

X5官网中 关于TBS -> 平台适配 中已经写明了只支持armeabi、armeabi-v7a、arm64-v8a 这3种架构,因此对于x86等架构是不支持的(AS模拟器),抛开模拟器,大部分似乎只需提供armeabi架构就ok了。

微信中提取出来的这个内核的架构可能是arm64-v8a,如果你要armeabi架构,请用下面方法2来获取内核。

方法2:App内内访问tbs调试页安装新内核

集成了上面的老版本SDK后,你的App就可以通过访问http://debugtbs.qq.com页面来手动下载最新

X5内核(如果下载不了,尝试改回新版本SDK下载,然后再改回来)。点击安装线上内核(参考顶上【图1】),它会自动识别App的架构,下载到armeabi或者arm64-v8a架构的TBS内核包,下载完后重启App就可以进行内核提取操作了。

这就有两种途径获取到内核包了,一个是在安装时监控App的网络请求,得到下载地址;另外一个就是和微信里面一样,点击拷贝内核按钮,参考上面微信的流程。

这里提供我拿到的一个内核下载地址:

http://soft.tbs.imtt.qq.com/17421/tbs_res_imtt_tbs_release_integrateWithX5core_43500SDK_43656Core.zip

30多M,内核版本:45318(20200714112122),Chrome 77

步骤三、集成内核到App中

解压内核得到so

你提取到内核文件就是一个apk文件,直接zip解压就行了,里面有lib + assets 两个目录,我们要把这两个目录内的所有文件合到一起放到一个目录再操作:

lib目录内可能是armeabi 或者 arm64-v8a,不同架构是因为是根据你App架构(或微信) + 手机支持的架构由TBS自动下载的,如果你需要的架构类型和lib里面的不同,那么请参考上面重新提取内核。

将lib/arm*内的so文件复制出来,和assets/webkit内的文件放到一起,总共一起共40来个文件。

so改名

将刚才复制到一起的一堆文件,文件名统统加上libtbs.前缀 + .so后缀,比如abc.so文件,改名后变成libtbs.abc.so.so,jar、conf文件也不例外。

附:CMD命令行批量改名

::直接在当前这堆文件的目录执行下面代码,批量改名
for /F %i in ('dir /A:-D /B') do move %i "libtbs.%i.so"

集成内核

将改好名的所有文件,copy到项目的src/main/jniLibs/armeabi目录中(如果是arm64-v8a的一样copy),这样内核就集成好了(见文末图)。下面我们只需要在app运行时激活这个内核就ok了。

记得build.gradle中配置上ndk,如

defaultConfig {
...
ndk {abiFilters "armeabi","x86"} //真机 + 模拟器,谈性能?不如喂狗
}

激活X5内核

不要用QbSdk.initX5Enviroment方法,改用QbSdk.preinstallStaticTbs方法。

在显示webview前,你要先把X5内核安装好(我管他叫激活)。代码就一句话,你可以在Application里面,或者当前Activity(你得激活完后再手动创建WebView)里面执行:

//此方法非常耗时,应当开个线程
QbSdk.preinstallStaticTbs(getApplicationContext()); //这里就可以安全的创建WebView了,只要你的ABI架构没有问题,那么这里一定能加载到X5内核

简单点就在Application里面激活就行,比如这样子:

public class MyApp extends Application{
public static Boolean X5Ok=null; @Override
public void onCreate(){
super.onCreate(); new Thread(new Runnable() {
@Override
public void run() {
X5Ok=QbSdk.preinstallStaticTbs(getApplicationContext());
}
}).start();
}
} /*使用的时候就在Activity里面来点暴力吧:
onCreate(...) {
while(MyApp.X5Ok==null){ System.currentTimeMillis(); } super.onCreate(...);
setContentView(...); if(!MyApp.X5Ok){
throw new RuntimeException("什么垃圾玩意");
}
}
*/

其他的一些配置,参考官网就OK

权限

<uses-permission ....
抱歉,先毛权限也不给。你App本来需要什么权限,就给什么权限(网络、录音、摄像头),不用管X5官网的那一坨。
等他崩溃再一个个给,似乎只要INTERNET、ACCESS_NETWORK_STATE权限就够了。

包名替换

Java文件中:android.webkit.WebView -> com.tencent.smtt.sdk.WebView

布局文件中:<WebView /> -> <com.tencent.smtt.sdk.WebView />

详细的包名替换阅读X5官网。

WebView网页权限

当网页访问摄像头、麦克风时,X5默认会弹一个确认对话框,自己的App网页就没有这么多条条框框了,可以静默授权:

//webkit是 WebChromeClient.onPermissionRequest 处理网页授权
//x5是 IX5WebChromeClientExtension.onPermissionRequest 处理网页授权 webView.setWebChromeClientExtension(new IX5WebChromeClientExtension() {
...
@Override
public boolean onPermissionRequest(String s, long l, MediaAccessPermissionsCallback callback) {
你的App摄像头、录音权限申请( 申请成功回调{
long allowed = 0;
allowed = allowed | MediaAccessPermissionsCallback.ALLOW_AUDIO_CAPTURE | MediaAccessPermissionsCallback.ALLOW_VIDEO_CAPTURE;
boolean retain = true;
callback.invoke(s, allowed,retain);
});
return true;
}
...
});

首次初始化冷启动优化

用不着,QbSdk.initX5Enviroment方法也用不着。

混淆、文件、视频

阅读X5官网文档。

结束语

欢迎关注我的GitHub:

H5、Hybrid App录音库,支持mp3、wav、语音识别:https://github.com/xiangyuecn/Recorder

省市区镇数据,提供坐标、边界,和shp、geojson、sql支持:https://github.com/xiangyuecn/AreaCity-JsSpider-StatsGov

如果本篇文章对你有帮助,您也可以到上面仓库中对作者进行打赏~

静态集成腾讯TBS X5内核WebView,从微信提取新版30M浏览器内核打包进apk的更多相关文章

  1. 腾讯TBS X5 WebView的简单使用

    工作中经常涉及H5网页的加载工作,最多使用的就是安卓系统控件WebView,但是当网页内容比较多的时候,需要等待很久才能加载完,加载完后用户才能看到网页中的内容,这样用户需要等很久,体验很差. 那能不 ...

  2. 记一次腾讯TBS浏览服务集成实践

    这次的分享源于最近的实际开发工作. 项目需求是 在原生Android应用中嵌入WebView,放置用于支撑音视频直播业务的Web页: 另外还需提供Word.Excel.PowerPoint.PDF等常 ...

  3. 第一天·浏览器内核及Web标准

    一·浏览器及浏览器内核 1.常见的浏览器 (1)IE浏览器 IE是微软公司旗下浏览器,是目国内用户量最多的浏览器.IE诞生于1994年,当时微软为了对抗市场份额占据将近百分之九十的网景Netscape ...

  4. 由Chromium内核引起的微信内置浏览器rce漏洞复现

    背景 chrome浏览器爆出漏洞,github上公开了poc:https://github.com/r4j0x00/exploits/tree/master/chrome-0day,在关闭chrome ...

  5. 安卓开发笔记(二十四):手把手教你一步步集成腾讯X5内核(Tencent TBS X5)

    1.为什么要集成腾讯X5内核? X5内核相对于系统webview,具有下述明显优势: 1) 速度快:相比系统webview的网页打开速度有30+%的提升: 2) 省流量:使用云端优化技术使流量节省20 ...

  6. Android 开发学习进程0.28 腾讯TBS接入和相关问题

    TBS 的接入和使用 TBS 的接入 腾讯TBS是X5内核的升级版,可以当作webview 来打开 网页,可以以用来打开docx doc pdf 等文件,这里主要使用的是文件功能. 依赖接入 api ...

  7. Ionic2中集成腾讯Bugly之自定义插件

    Ionic2混合开发,入坑系列:Ionic2中集成腾讯Bugly之自定义插件 1.编写Bugly.js代码 var exec = require('cordova/exec'); module.exp ...

  8. Unity3D集成腾讯语音GVoice SDK

    友情提示:最近发现腾讯GVoice有另一个官网,叫做腾讯游戏服务,经过对比发现这个网站才是最新的,下面我介绍的那个估计是已经废弃的,但不知道为啥老的网站没有直接链接到新网址而是仍然保留了.不过新官网的 ...

  9. 微信小程序集成腾讯云 IM SDK

    微信小程序集成腾讯云 IM SDK 1.背景 因业务功能需求需要接入IM(即时聊天)功能,一开始想到的是使用 WebSocket 来实现这个功能,然天意捉弄(哈哈)服务器版本太低不支持 wx 协议(也 ...

随机推荐

  1. 响应式布局rem、rem方法封装、移动端响应式布局

    相信大家在做移动端的时候都会做各个手机的适配这种适配就是响应式布局在之前做网站的响应式从pc到手机用的是媒体查询 @media screen and (max-width: 300px){} 最大宽度 ...

  2. 【IDEA】创建maven项目,webapp没有被标识,无法识别

    问题描述 新建maven项目模块后,webapp目录未被标识,也就是没有小蓝点的图标显示. 解决方法 点击"File"下的"Project Strucure", ...

  3. Kite: 一个分布式微服务框架(翻译)

    原文链接:https://blog.gopheracademy.com/birthday-bash-2014/kite-microservice-library/ 此为中文翻译 用GO语言来编写web ...

  4. Java顺序查找、二分查找

    Java顺序查找.二分查找   查找算法中顺序查找算是最简单的了,无论是有序的还是无序的都可以,只需要一个个对比即可,但其实效率很低. 顺序查找 动图演示 详细代码 // 顺序查找 public st ...

  5. xenomai内核解析--双核系统调用(三)--如何为xenomai添加一个系统调用

    版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正. @ 目录 一.添加系统调用 二.Cobalt库添加接口 三.应用使用 一.添加系统调用 下面给xenomai添加一个系统调用g ...

  6. 深入理解JVM(二)垃圾收集器

    GC三问: 哪些内存需要回收? 什么时候回收? 如何回收? 程序计数器.虚拟机栈.本地方法栈随线程而生,随线程而灭,栈帧的内存分配在类结构确定下来就已知,在方法结束或者线程结束时就会回收.所以垃圾回收 ...

  7. presto和hive日期函数对比

    时间格式转换 日期格式→Unix时间戳 转10位Unix时间戳 数据:2020-07-23 15:01:13 Presto:select to_unixtime(cast('2020-07-23 15 ...

  8. scp的使用以及cp的对比

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...

  9. Centos 7下编译安装Apache

    (1)下载apr.apr-util.httpd源码包 百度云下载地址:https://pan.baidu.com/s/1HyW_9XTLhhhf5j_IuNCQsQ 提取码:pg4d (2)安装编译工 ...

  10. Spring boot 基础整理(一)

    环境准备 (1)JDK 环境必须是 1.8 及以上(2)后面要使用到 Maven 管理工具 3.2.5 及以上版本,所以会先介绍 Maven 的安装与配置(3)开发工具建议使用 IDEA,也可以 My ...