Android中arm64 您所在的位置:网站首页 谷歌手机处理器是啥 Android中arm64

Android中arm64

2024-06-06 10:25| 来源: 网络整理| 查看: 265

------《怎么利用Android Studio查看Android-SDK源码》 前言正题ABI是如何工作的ABI具体适配流程项目中该如何适配打包配置split分包ndk{abiFilters:}过滤

前言

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

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

补充:查询手机cpu命令行 答: adb shell getprop ro.product.cpu.abi 在这里插入图片描述

正题

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.



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有