当前位置:首页 > 实用技巧 >

为什么不支持x5内核(x5内核加载失败修复步骤)

来源:原点资讯(www.yd166.com)时间:2023-06-12 08:58:57作者:YD166手机阅读>>

官方给的建议是使用 armeabi 或者 armeabi-v7a。

在前文有提到,ABIs 本身是有一些兼容规则的,但是这种兼容规则,是有条件的。

举个例子:64 位的 arm64-v8a 是可以向下兼容的,但是这有个前提,那就是如果你的项目中,有 armeabi-v7a 和 arm64-v8a 两个目录,就需要保证这两个目录下支持的 so 库文件保持一致。

在左边的情况下,如果 arm64-v8a 的手机用到 b.so 时,就会去 arm64-v8a 目录下找,当然是找不到 b.so 文件的,就会直接抛异常,而不会再去 armeabi-v7a 目录下继续寻找。

如果需要提供多套 ABIs 的支持,就需要保证所有 ABI 目录下,对应的 so 文件保持一致。

为什么不支持x5内核,x5内核加载失败修复步骤(5)

而在一些特殊的情况下,我们无法提供对应平台的 so 库,例如腾讯 X5 内核这种情况,就需要做个取舍了。

在没有 Google Play 的强制策略下,同时又因为各方考虑,大多数时候我们可能会舍弃其他 ABIs 的支持。但是现在既然强制执行了,腾讯 X5 内核就可能升级以提供 64 位的 so 库,毕竟一边是无法上架,另外一遍是一个 WebView 的内核,谁都知道怎么取舍。

三、支持 64 位架构

3.1 是否包含 64 位库?

介绍了 Android 下 CPU 架构的一些细节,接下来就要开始正题了,如何升级并支持 64 位架构。

从前文中应该了解到,支持对应的 ABIs,反映在项目中,就是存在对应 ABIs 架构的目录,并且目录中有完备的 so 库支持。

Google 并不要求我们支持所有的 64 位架构,但是对于已经支持的每种原生 32 位架构,就必须包含对应的 64 位架构。

例如:

  • 对于 ARM 架构,有 armeabi-v7a(32位) 就必须 arm64-v8a(64位)。
  • 对于 x86 架构,有 x86(32位) 就必须有 x86_64(64位)

这就要求我们有对应的目录,并且目录中包含对应的 so 文件。APK 中提供了完备的 ABIs 支持,运行的之后,会选取对应的最优支持进行加载和使用。

需要注意的是,有时候我们将 32 位的 so 复制到 64 位中,运行不会出现异常,但是这依然存在隐患。最好的办法是根据不同的架构,编译对应的 so 文件,原则上,我们的目标是确保应用可以在仅支持 64 位架构的环境中正常运行。

3.2 判断是否支持 64 位架构

前面也提到,我们的项目中,可能会引入一些第三方库,导致在不明确的情况下,引入了一些预期之外的 ABIs 库。

通常我们的做法是在 Gradle 中增加 abiFilters 过滤,来确保不会在打包输出的 APK 中存在预期之外的 ABIs 目录和 so 库。

ndk { //设置支持的SO库架构 abiFilters 'armeabi-v7a' }

那么我们拿最终打包输出的 APK 文件去分析,是最稳妥的办法。

分析的方法有两种:

1. AS 的 APK 分析器

在 Android Studio 中,从菜单依次选择 Build → Analyze APK…

为什么不支持x5内核,x5内核加载失败修复步骤(6)

选择需要分析的 APK 文件,查看其 lib 目录,是否存在预期的 ABIs 目录以及完备的 so 文件。

为什么不支持x5内核,x5内核加载失败修复步骤(7)

2. 使用 zipinfo 命令进行分析

得到待分析的 APK 文件,就可以通过 zipinfo grep 命令,输出其内包含的 so 文件。

> zipinfo -1 YOUR_APK_FILE.apk | grep \.so$ lib/armeabi-v7a/libmain.so lib/armeabi-v7a/libmono.so lib/armeabi-v7a/libunity.so lib/arm64-v8a/libmain.so lib/arm64-v8a/libmono.so lib/arm64-v8a/libunity.so

依然是去看对应目录和 so 文件是否完备。

3.3 在 64 位设备上测试应用

支持 64 位架构是为了让我们利用 CPU 的特性,以提升性能,但是稳定依然是我们首先要保证的,所以在升级之后,就需要进行测试。

要测试 App,最简单的方式是使用 adb 命令安装该应用,可以配合 --abi 参数,用以指示要将那些 so 库,安装到设备上,这样我们在这个设备上安装的 App,就会仅包含我们制定的库。

# 成功安装 APK : > adb install --abi armeabi-v7a YOUR_APK_FILE.apk Success # 如果 APK 中不包含 64 位 so 文件: > adb install --abi arm64-v8a YOUR_APK_FILE.apk adb: failed to install YOUR_APK_FILE.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113] # 如果你的设备(手机)不支持 64 位架构 > adb install --abi arm64-v8a YOUR_APK_FILE.apk ABI arm64-v8a not supported on this device

去年上市的手机,大部分都是 64 位架构的,找一款来测试即可。

3.4 分包处理

如果我们的应用只需要在国内分发,当前的策略对我们并不影响,保持原样就好了。但是如果存在国际版,需要上架 Google Play 就一定要重视此次升级。

在 Google Play 上传 APK,是可以根据 CPU 架构上传不同的 APK 的,也就是我们可以针对 32 位上传一个 APK,再上传一个 64 位的 APK。

此时就需要用到 Gradle 的打包技巧了,分别输出几个仅包含对应平台的 APK,以此完成 Google Play 的要求,分别上传 32 位的支持 APK 和 64 位的支持 APK,这样能够 APK 文件不至于增大很多。

android { ... splits { abi { enable true reset() include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for universalApk true //generate an additional APK that contains all the ABIs } } // map for the version code project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9] android.applicationVariants.all { variant -> // assign different version code for each output variant.outputs.each { output -> output.versionCodeOverride = project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 android.defaultConfig.versionCode } } }

这里利用 Gradle 的 splite 配置,有兴趣可以直接查阅文档,就不展开讲了。

四. 小结时刻

在本文中,我们借此次 Google Play 的强制支持 64 位架构的事情,讲解了 Android 下 so 库的一些兼容问题。

如果你在 Google Play 上有应用需要更新,别忘了提前准备需要的 so 库,大多数原生支持的第三方库,在此之前其实都已经提供了对应的 64 位架构。我们只需要在最终日期之前,仔细的进行增加 so 文件,以达到适配的效果。

更新完成之后,别忘了测试,本文就到这里,你有什么更新的见解,欢迎在留言区讨论。

本文对你有帮助吗?留言、转发、点赞是最大的支持,谢谢!


在头条号私信我。我会送你一些我整理的学习资料,包含:Android反编译、算法、设计模式、虚拟机、Linux、Kotlin、Python、爬虫、Web项目源码。

上一页12末页

栏目热文

x5内核没了会怎样(x5内核初始化失败怎么解决)

x5内核没了会怎样(x5内核初始化失败怎么解决)

从 iOS 13 的深色外观到 Android 10 的深色主题,似乎是延续了去年对「数字健康」这一话题的思考,如何将界...

2023-06-12 09:32:58查看全文 >>

为什么x5内核加载失败(内核加载失败解决办法)

为什么x5内核加载失败(内核加载失败解决办法)

TBS视频播放TBS视频播放器可以支持市面上几乎所有的视频格式,包括mp4, flv, avi, 3gp, webm, ...

2023-06-12 09:22:25查看全文 >>

无法安装x5内核(安卓x5内核安装包下载)

无法安装x5内核(安卓x5内核安装包下载)

RTS 在阿里云视频直播的基础上进行底层技术优化,通过集成阿里云播放器 SDK,支持在千万级并发场景下节点间毫秒级延时直...

2023-06-12 09:09:28查看全文 >>

x5预置效果是什么意思(x5音效设置怎么调最佳)

x5预置效果是什么意思(x5音效设置怎么调最佳)

  对于摄影发烧友来说,有三大必备法宝值得用一生去追求,那就是专业镜头、好的拍摄场景和功能强大的后期图片处理软件,所以说...

2023-06-12 08:53:25查看全文 >>

x5内核与cw内核哪个好(为什么要关闭x5内核)

x5内核与cw内核哪个好(为什么要关闭x5内核)

作者:billpchen,腾讯看点前端开发工程师译者:编译青春转发链接:HTTPS://mp.weixin.qq.com...

2023-06-12 09:31:35查看全文 >>

x5内核适应安卓哪个版本

x5内核适应安卓哪个版本

2015 年 HTTP/2 标准发表后,大多数主流浏览器也于当年年底支持该标准。此后,凭借着多路复用、头部压缩、服务器推...

2023-06-12 09:14:08查看全文 >>

怎么用x5内核设置全屏(游戏用x5内核打开很慢该怎么办)

怎么用x5内核设置全屏(游戏用x5内核打开很慢该怎么办)

随着网络提速和手机性能的提升,移动端页面中出现视频内容的频率越来越高。HTML5 通过 video 标签来支持嵌入式的媒...

2023-06-12 09:07:48查看全文 >>

名校同步课堂直播在哪个台(名校同步课堂怎么收看直播)

名校同步课堂直播在哪个台(名校同步课堂怎么收看直播)

紧 急 声 明 根据河南省教育厅 河南广播电视台 河南广电传媒控股集团有限责任公司《关于做好名校同步课堂收看工作的紧急通...

2023-06-12 09:32:51查看全文 >>

在电脑上怎么看名校同步课堂直播

在电脑上怎么看名校同步课堂直播

第十一周(4月20日-24日)详细电视和网络播出时间表小学详细播出时间表初中课程详细播出时间表高中课程详细播出时间表特别...

2023-06-12 09:25:14查看全文 >>

名校同步课堂怎么打开(用手机怎么看名校同步课堂)

名校同步课堂怎么打开(用手机怎么看名校同步课堂)

大象新闻记者 魏俊浩5月3日,郑州发布73号通告:主城区内学校、托幼机构、校外培训机构暂缓开学,启动线上教学。线上优质课...

2023-06-12 08:46:52查看全文 >>

文档排行