静态集成腾讯TBS X5内核WebView,从微信提取新版30M浏览器内核打包进apk
由于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内核,没有问题。
下载后,只需要提取里面的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的更多相关文章
- 腾讯TBS X5 WebView的简单使用
工作中经常涉及H5网页的加载工作,最多使用的就是安卓系统控件WebView,但是当网页内容比较多的时候,需要等待很久才能加载完,加载完后用户才能看到网页中的内容,这样用户需要等很久,体验很差. 那能不 ...
- 记一次腾讯TBS浏览服务集成实践
这次的分享源于最近的实际开发工作. 项目需求是 在原生Android应用中嵌入WebView,放置用于支撑音视频直播业务的Web页: 另外还需提供Word.Excel.PowerPoint.PDF等常 ...
- 第一天·浏览器内核及Web标准
一·浏览器及浏览器内核 1.常见的浏览器 (1)IE浏览器 IE是微软公司旗下浏览器,是目国内用户量最多的浏览器.IE诞生于1994年,当时微软为了对抗市场份额占据将近百分之九十的网景Netscape ...
- 由Chromium内核引起的微信内置浏览器rce漏洞复现
背景 chrome浏览器爆出漏洞,github上公开了poc:https://github.com/r4j0x00/exploits/tree/master/chrome-0day,在关闭chrome ...
- 安卓开发笔记(二十四):手把手教你一步步集成腾讯X5内核(Tencent TBS X5)
1.为什么要集成腾讯X5内核? X5内核相对于系统webview,具有下述明显优势: 1) 速度快:相比系统webview的网页打开速度有30+%的提升: 2) 省流量:使用云端优化技术使流量节省20 ...
- Android 开发学习进程0.28 腾讯TBS接入和相关问题
TBS 的接入和使用 TBS 的接入 腾讯TBS是X5内核的升级版,可以当作webview 来打开 网页,可以以用来打开docx doc pdf 等文件,这里主要使用的是文件功能. 依赖接入 api ...
- Ionic2中集成腾讯Bugly之自定义插件
Ionic2混合开发,入坑系列:Ionic2中集成腾讯Bugly之自定义插件 1.编写Bugly.js代码 var exec = require('cordova/exec'); module.exp ...
- Unity3D集成腾讯语音GVoice SDK
友情提示:最近发现腾讯GVoice有另一个官网,叫做腾讯游戏服务,经过对比发现这个网站才是最新的,下面我介绍的那个估计是已经废弃的,但不知道为啥老的网站没有直接链接到新网址而是仍然保留了.不过新官网的 ...
- 微信小程序集成腾讯云 IM SDK
微信小程序集成腾讯云 IM SDK 1.背景 因业务功能需求需要接入IM(即时聊天)功能,一开始想到的是使用 WebSocket 来实现这个功能,然天意捉弄(哈哈)服务器版本太低不支持 wx 协议(也 ...
随机推荐
- Django框架07 /cookie和session
Django框架07 /cookie和session 目录 Django框架07 /cookie和session 1. django请求生命周期 2. cookie 3. session 4. 总结 ...
- 动手实现 LRU 算法,以及 Caffeine 和 Redis 中的缓存淘汰策略
我是风筝,公众号「古时的风筝」. 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 那天我在 LeetCode 上刷到一道 LRU 缓存机制的问题, ...
- [译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01
这是系列文章中的第一篇:使用GraphvizOnline可视化ASP.NETCore3.0终结点.. 第1部分-使用DOT语言来可视化你的ASP.NETCore3.0终结点(本文) 第2部分-向ASP ...
- Ethical Hacking - Web Penetration Testing(11)
SQL INJECTION Preventing SQLi Filters can be bypassed. Use a blacklist of commands? Still can be byp ...
- git分支间切换注意点和bug分支的处理
目录 备注: 知识点 记一次分支合并问题状况 从分支点开始,不同分支修改工作区的内容(不添加到暂存区和提交),切换分支,工作区的内容是一样的. 必须在提交或者暂存当前暂存区的状态后,再切换或合并分支 ...
- 区间dp复习 之 tyvj 1198 矩阵连乘
题目描述 一个\(n*m\)矩阵由\(n\)行\(m\)列共\(n*m\)个数排列而成.两个矩阵\(A\)和\(B\)可以相乘当且仅当\(A\)的列数等于\(B\)的行数.一个\(N*M\)的矩阵乘以 ...
- tineMCE 踩坑:images_upload_handler
tineMCE 的官方示例提供了前端上传图片方法 images_upload_handler 的写法. 但官方写的有点问题,上传会报错. 不过修改也很简单: images_upload_handler ...
- springboot+junit测试
文章目录 一.junit断言 二.测试模块 三.使用Mockito作为桩模块 四.使用mockMvc测试web层 五.批量测试和测试覆盖率 参考视频:用Spring Boot编写RESTful API ...
- IDEA 2020.1.2安装破解激活 idea 2020.1.3下载 安装 一键破解
IDEA 2020.1.2 idea 2020.1.3下载 安装 破解 本项目只做个人学习研究之用,不得用于商业用途!若资金允许,请点击链接购买正版,谢谢合作!学生凭学生证可免费申请正版授权!创业公司 ...
- Vue开启gzip压缩文件
在你的项目使用了Vue的路由懒加载.Vue使用CDN引用项目组件,减少项目体积 后,还是觉得项目加载速度慢,效果不尽如人意的时候,还有一个“瘦身项目”可以完成,那就是利用nginx和webpack来使 ...