Android中arm64-v8a、armeabi-v7a、armeabi是什么?

这篇具有很好参考价值的文章主要介绍了Android中arm64-v8a、armeabi-v7a、armeabi是什么?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

首先:ARM是神马?
答:ARM是我们设备的CPU架构。

其次:arm64-v8a、armeabi-v7a、armeabi是神马?
答:在Android 系统上,每一个CPU架构对应一个ABI。他们就是我们的ABI类型
Android中arm64-v8a、armeabi-v7a、armeabi是什么?
最后:ABI是神马?
答:应用程序二进制接口(Application Binary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库。

补充:查询手机cpu命令行
答: adb shell getprop ro.product.cpu.abi
Android中arm64-v8a、armeabi-v7a、armeabi是什么?

正题

armeabi-v7a: ARM v7架构之前的主流版本,现在也很多。
arm64-v8a: 64位支持,目前主流的版本。

ABI是如何工作的

一个Android设备可以支持多种ABI,设备主ABI和辅助ABI。
以arm64-v8a为主ABI的设备,辅助ABI为armeabi-v7a和armeabi。
以armeabi-v7a为主ABI的设备,辅助ABI为armeabi。

ABI具体适配流程

对于一个cpu是arm64-v8a架构的手机,它运行app时,进入jnilibs去读取库文件时,先看有没有arm64-v8a文件夹,如果没有该文件夹,去找armeabi-v7a文件夹,如果没有,再去找armeabi文件夹,如果连这个文件夹也没有,就抛出异常。
如果有arm64-v8a文件夹,那么就去找特定名称的.so文件,注意:如果没有找到想要的.so文件,不会再往下(armeabi-v7a文件夹)找了,而是直接抛出异常。

项目中该如何适配

问题:只适配了armeabi-v7a,那如果APP装在其他架构的手机上,如arm64-v8a上,会蹦吗?
答: 不会,但是反过来会。 因为armeabi-v7a和arm64-v8a会向下兼容:

只适配armeabi的APP可以跑在armeabi,x86,x86_64,armeabi-v7a,arm64-v8上
只适配armeabi-v7a可以运行在armeabi-v7a和arm64-v8a
只适配arm64-v8a 可以运行在arm64-v8a上

适配方案有哪些?
1、只适配armeabi 优点:基本上适配了全部CPU架构(除了淘汰的mips和mips_64) 缺点:性能低,相当于在绝大多数手机上都是需要辅助ABI或动态转码来兼容。
2、只适配 armeabi-v7a 同理方案一,只是又筛掉了一部分老旧设备,在性能和兼容二者中比较平衡。
3、只适配 arm64-v8 优点: 性能最佳 缺点: 只能运行在arm64-v8上,要放弃部分老旧设备用户。

这三种方案都是可以的,现在的大厂APP适配中,这三种都有,大部分是前2种方案。具体选哪一种就看自己的考量了,以性能换兼容就arm64-v8,以兼容换性能armeabi,二者稍微平衡一点的就armeabi-v7a。

打包配置

split分包

这个命令可以按照各种规则去分包,比如按照abi,屏幕密度(即ldpi,hdpi等)分包。

splits { 
   
        abi { 
   
            enable true
            reset()
            include 'x86','armabi'
            exclude 'armeabi', 'armeabi-v7a', "arm64-v8a"
            universalApk true
        }
    }

ndk{abiFilters:}过滤

这个指令可以配置只打包你配置的so库,没有配置的就不打包,很灵活。 第三方aar文件,如果这个sdk对abi的支持比较全,可能会包含armeabi、armeabi-v7a、x86、arm64-v8a、x86_64五种abi,而你应用的其它so只支持armeabi、armeabi-v7a、x86三种,直接引用sdk的aar,会自动编译出支持5种abi的包。但是应用的其它so缺少对其它两种abi的支持,那么如果应用运行于arm64-v8a、x86_64为首选abi的设备上时,就会crash了,所以我们需要在我们的app中配置 abiFilter 配置,来避免一些未知的错误

//过滤x86的so库
ndk { 
   
    abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
}

这样配置会将armeabi,armeabi-v71,arm64-v8a这3个包下的so库都打包到一个apk,而不像splits会每一个包打一个apk.文章来源地址https://www.toymoban.com/news/detail-473570.html

到了这里,关于Android中arm64-v8a、armeabi-v7a、armeabi是什么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • autox.js的三个版本universal、armeabi-v7a、arm64-v8a的区别

    universal : 通用版(不在乎安装包大小/懒得选就用这个版本,包含以下2种CPU架构so) armeabi-v7a : 32位ARM设备(备用机首选) arm64-v8a : 64位ARM设备(主流旗舰机) ABI 在Android 系统上,每个不同的CPU支持不同的指令集,CPU与指令集的组合都有对应的二进制接口,即ABI armeabi 是第5、

    2024年02月05日
    浏览(37)
  • 2 files found with path ‘lib/arm64-v8a/xxx.so‘ 问题解决

    目录 2 files found with path ‘lib/arm64-v8a/xxx.so‘ 问题 2 files found with path \\\'META-INF/DEPENDENCIES\\\' from inputs:报错 解决方法: 在报该编译错误的module的build.gradle中加入如下配置项,排除掉中间生成的lib/arm64-v8a/xxx.so 解决办法 在报该编译错误的module的build.gradle中加入如下配置项,排除掉中

    2024年02月11日
    浏览(39)
  • linux NDK交叉编译rtmp 与 ffmpeg+rtmp交叉编译(v7a,v8a) 完成流程

    最近在学RTMP,记录一下完成的编译流程 我是mac 电脑,但是mac上编译一直通过不了,后来才换到服务器上编译, 其实mac也能编译,只是最开始踩到坑里面了… 这里记录一下linux编译完整流程 环境: NDK: android-ndk-r17c Ffmpeg: ffmpeg4.2.2 (高版本也可以编译) system: mac 首先下载 rtmp https://gith

    2024年02月15日
    浏览(37)
  • Android强行进阶:为何大厂APP如微信、支付宝、淘宝、手Q等只适配了armeabi-v7a-armeabi?,看这一篇就够了

    // 适配指定CPU架构 ndk { abiFilters ‘arm64-v8a’, ‘x86_64’ } } } 效果如下: 可以看到,只生成了我们指定CPU架构的so文件,包的大小也减少了 5.3MB 。 这时候,你可能会有一个疑问,Android 共支持7种CPU架构,那么,我们在实际项目中该适配哪些CPU架构能保证最好的兼容,同时又最

    2024年04月17日
    浏览(57)
  • 2 files found with path ‘lib/armeabi-v7a/liblog.so‘ from inputs:

    下图两个子模块都用CMakeLists.txt引用了android的log库,编译后,在它们的build目录下都有liblog.so的文件。 四个CPU架构的文件夹下都有。 上层模块app不能决定使用哪一个,因此似乎做了合并,路径就是报错里的哪个路径,须在app模块下的build.gradle文件指明使用该路径下的liblog.s

    2024年02月07日
    浏览(36)
  • 在amd64平台构建适用于linux/arm64/v8平台的Docker镜像

    该镜像内置了Redis、MySQL、Nginx、JDK11功能 Docker 提供了一种名为 Buildx 的功能,它允许在不同的平台上进行多架构构建。我们可以使用 Buildx 在 amd64 平台上构建适用于 linux/arm64/v8 平台的 Docker 镜像。 请按照以下步骤进行操作: 确保您的 Docker 安装中已启用 Buildx。您可以运行以

    2024年02月17日
    浏览(30)
  • manifest for docker.io/arm64v8/elasticsearch:latest not found问题处理

    使用docker安装elasticsearch的时候可能会碰到这样的问题: manifest for docker.io/arm64v8/elasticsearch:latest not found 在安装arm64的elasticsearch时,docker安装会报错,无法继续进行,意思就是在docker找不到最新版本的服务,这个时候要注意,在docker hub官网上面有关于elasticsearch的版本号,如果

    2024年02月11日
    浏览(38)
  • The requested image‘s platform (linux/arm64/v8) does not match the detected host platform (linux/amd

    这一段完整的报错是: The requested image’s platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested 翻译过来就是说:请求的映像的平台(linux/arm64/v8)与检测到的主机平台(linux/amd64)不匹配,未请求特定平台。 背景: 这段报错是发生在内

    2024年02月01日
    浏览(39)
  • 注意避坑:centos7官方版镜像不支持arm架构(docker请求的映像的平台(linux/aamd64)与检测到的主机平台(linux/alm64/v8)不匹配)fauria/vsftpd

    注意是centos7 docker官方版镜像不支持arm架构(FROM centos:7),不是centos7不支持arm 今天基于fauria/vsftpd在我们的arm盒子上做了个docker镜像,但是用镜像run容器的时候提示: 翻译就是: 警告:请求的映像的平台(linux/aamd64)与检测到的主机平台(linux/alm64/v8)不匹配,并且没有请求

    2024年02月08日
    浏览(34)
  • 安装包 amd,amd64, arm,arm64 都有什么区别

    现在的安装包也不省心,有各种版本都不知道怎么选。 根据你安装的环境配置。 amd: 32位X86 amd64: 64位X86 arm: 32位ARM arm64: 64位ARM amd64是X86架构的CPU,64位版。amd64又叫X86_64。主流的桌面PC,笔记本电脑,服务器(包括虚拟机)都在用X86_64的CPU。 arm64是ARM架构的CPU,64位版。

    2024年02月05日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包