关于接入腾讯X5内核遇到的坑

作者 : 开心源码 本文共2836个字,预计阅读时间需要8分钟 发布时间: 2022-05-13 共215人阅读

前言

根据之前开发的案例来看,原生WebView存在着很多的不完善,面临开发使用WebView时,通常会使用腾讯X5内核;但是腾讯X5内核也有少量不完善的地方,只是相比原生WebView会好少量,那么关于X5接入会遇到那些坑,该如何处理呢,本文将讲述自己接入X5内核时遇到的问题及处理方法。

问题1,选择图片问题
问题2,视频横屏全屏的问题
在查找资料的时候看到别人写的blog讲得还可以,所以请移步查看。
自己遇到的问题通常是问题3:“64位手机无法加载x5”

x5内核暂时不提供64位的so文件,在64位手机上需要让AP以32位模式运行。具体操作如下(官网问题单地址:https://x5.tencent.com/tbs/technical.html#/detail/sdk/1/34cf1488-7dc2-41ca-a77f-0014112bcab7):

x5内核暂时不提供64位的so文件,在64位手机上需要让AP以32位模式运行。具体操作如下:1.假如使用是Eclipse则需要将所有的.so文件都放置在so加载目录:lib/armeabi文件夹下(没有该目录则新建一个,AP中没有使用到.so文件则需要拷贝任意一个32位的so文件到该目录下,假如没有合适的so可以到官网(http://x5.tencent.com/tbs/sdk.html) 下载官网“SDK接入示例“,拷贝对应目录下的liblbs.so文件),lib文件夹下不要有其余以”armeabi“开头的文件夹。2.假如使用的是 Android studio则需要进行两项配置,(1)打开对应module中的build.gradle文件,在文件的android{}中的defaultConfig{}里(假如没有defaultConfig{}则手动增加)增加如下配置: ndk{abiFilters "armeabi", "armeabi-v7a", "x86", "mips"},假如配置后编译报错,那么需要在gradle.properties文件中加上Android.useDeprecatedNdk=true;(2)找出build.gradle中配置的so加载目录:jniLibs.srcDir:customerDir,假如没有该项配置则so加载目录默认为:src/main/jniLibs,需要将.so文件都放置在so加载目录的armeabi文件夹下(没有该目录则新建一个,AP中没有使用到.so文件则需要拷贝任意一个32位的so文件到该目录下,假如没有合适的so可以到官网http://x5.tencent.com/tbs/sdk.html下载官网“SDK接入示例“,拷贝对应目录下的liblbs.so文件),so加载目录下不要有其余以”armeabi“开头的文件夹。

而这里我们需要知道相关ABI的知识:
我们都知道引入so库的时候需要在项目的build.gradle文件中配置ndk{abiFilters “armeabi”, “armeabi-v7a”, “x86”, “mips”}这样的代码,但是具体的意义是什么呢?
下面理解几个问题
1、ABI 是 Application Binary Interface 的缩写。不同 Android 手机使用不同的 CPU,因而支持不同的指令集。我们必需为应用要使用的每个 CPU 架构指定 ABI。

支持的 ABI:

ABI支持的指令集说明
armeabi* ARMV5TE 和更高版本* Thumb-1无硬浮点。
armeabi-v7a* armeabi* Thumb-2* VFPv3-D16* 其余(可选)与 ARMv5、v6 设施不兼容。
arm64-v8a* AArch-64
x86* x86 (IA-32)* MMX* SSE/2/3* SSSE3不支持 MOVBE 或者 SSE4。
x86_64* x86-64* MMX* SSE/2/3* SSSE3* SSE4.1、4.2* POPCNT
mips* MIPS32r1 及更高版本使用硬浮点,并且假设 CPU:FPU 时钟比率为 2:1 以获取最大兼容性。 不提供 micromips 或者 MIPS16。
mips64* MIPS64r6

armeabi是针对所有的arm cpu,只需支持arm的指令集即可以,
v7a,v8a是针对arm后来出的指令集版本制定的cpu如符合arm7指令集的cpu

armeabi-v7a是针对有浮点运算或者高级扩展功能的arm v7 cpu。
armeabi-v7a(32位ARM设施),
arm64-v8a(64位ARM设施)

假如在匹配到的目录下没有对应的库也不会去别的目录下加载;但是armeabi目录可以匹配所有的arm架构的cpu。

armeabi与armeabi-v7a的区别 (转载自armeabi与armeabi-v7a的区别)

1、手机cpu架构。
讲到armeabi就不得不讲手机cpu了。电脑有电脑的cpu,手机也有手机的cpu。cpu有厂商属性,也有架构属性,架构的话自己简单地了解就是它的内部模块的组成结构。

其中arm架构的手机cpu占市场的大部分,这也是今天的重点。但arm架构的发展历史悠久,也有很多不同的版本。

2、前面讲了cpu架构,为下面的讲述做了一个技术背景的铺垫。
我们在开发Android项目的时候,比方使用高德地图导航或者者3d地图的时候就会使用到.so库文件,它们保存在armeabi和armeabi-v7a或者arm64-v8a等目录下,这有什么作用呢?

其实这是给app运行时读取的几个目录,但会根据手机cpu架构类型只从其中一个文件夹读取,有点相似values和values-21的作用,但是与它们又有点不同。

后者的规则是:假如手机是21以上的会首先在values-21文件里面查找样式等,假如查找不到才去values文件找;假如手机是21以下的就直接在values文件下找。

前者的规则是:根据cpu架构类型去app的libs里面匹配到对应的目录比方armeabi或者者armeabi-v7a,而后就加载这个目录下的.so库;

假如在匹配到的目录下没有对应的库也不会去别的目录下加载;

但是armeabi目录可以匹配所有的arm架构的cpu,意思是指所有的arm架构的cpu的安卓手机假如没有找到最优的对应的目录,则会去匹配armeabi目录。

我的推测是arm架构的cpu是向下兼容的,即保留之前版本的功能,而armeabi目录是匹配低版本armv5的,所以高版本的arm架构的cpu可以读取armeabi目录下的.so库文件;查过资料会发现低版本的arm架构cpu支持软浮点运算而高版本的支持硬件浮点运算,这是他们的区别之一。

3、最近在开发高德导航功能,官方文档提醒此功能不支持armeabi-v7a,根据以上的讲述:导航功能并没有为armeabi-v7a对应的cpu设计一套.so库文件,所以只能使用armeabi目录下的库文件,所以要删掉armeabi-v7a目录。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 关于接入腾讯X5内核遇到的坑

发表回复