jni中arm64-v8a,armeabi-v7a,armeabi文件夹的意义和用法

兼容和文件读取顺序

arm64-v8a是可以向下兼容的,其下有armeabi-v7a,armeabi
armeabi-v7a向下兼容armeabi

兼容得不够智能:
对于一个cpu是arm64-v8a架构的手机,它运行app时,进入jnilibs去读取库文件时,先看有没有arm64-v8a文件夹:

如果没有该文件夹,去找armeabi-v7a文件夹,如果没有,再去找armeabi文件夹,如果连这个文件夹也没有,就抛出异常
如果有arm64-v8a文件夹,那么就去找特定名称的.so文件,注意:如果没有找到,不会再往下(armeabi-v7a文件夹)找了,而是直接抛出异常

armeabi与armeabi-v7a的区别

armeabi就是针对普通的或旧的arm cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm cpu。
android从2.2开始支持armeabi-v7a

早期的Cortex-A系列处理器(A5、A7、A8、A9、A12、A15和A17)基于 ARMv7-A架构

高通820 四核心ARMv8
三星Exynos 8890 ARM Cortex-A53
麒麟950 四核A72+四核A53

从cpu规格表可以看出,目前市面上主流手机cpu多属于armeabi-v7a。
cpu天梯图和规格表:

http://www.mydrivers.com/zhuanti/tianti/01/
http://www.mydrivers.com/zhuanti/tianti/01/index_other.html

行业现状

对4家APK进行Analyze,可以发现Facebook和Twitter只使用了armeabi-v7a,而微信和淘宝只使用了armeabi,分析结果如下图所示:

另外,携程、饿了么、百度糯米都是只使用了armeabi,阿里系的淘票票使用了armeabi、x86

结论

从包体积大小、兼容性和性能上考虑,可以只保留armeabi-v7a。同时,为了避免引用的第三方库中有arm64-v8a的so文件导致64位机器仍然从arm64-v8a文件夹读取so文件,将非armeabi-v7a的so文件全部过滤掉:加入ndk .abiFilters

 defaultConfig {
        applicationId "xx.xx.x.xx"
        minSdkVersion 15
        targetSdkVersion 22
        versionCode 15
        versionName "1.2.7"
        multiDexEnabled true

        ndk {
            abiFilters  "armeabi-v7a"  // 指定要ndk需要兼容的架构(这样其他依赖包里mips,x86,armeabi,arm-v8之类的so会被过滤掉)
        }
}

引用

https://blog.csdn.net/hss01248/article/details/51505531

https://blog.csdn.net/ecjtuhq/article/details/79440986

原文地址:https://www.cnblogs.com/nyjcldxr/p/10315886.html

时间: 2024-08-29 20:21:24

jni中arm64-v8a,armeabi-v7a,armeabi文件夹的意义和用法的相关文章

Mac 中显示资源库(Library)文件夹目录的几种方法

Mac 中显示资源库(Library)文件夹目录的几种方法 Mac中Library目录在10.6.7系统之后默认隐藏的,要想找到此文件夹有如下几种方法: 1. 用命令可以使其显示: 在终端中执行命令: chflags nohidden ~/Library 可显示资源库文件夹 如想隐藏,可以在终端中执行命令: chflags hidden ~/Library 隐藏 2. 在Finder菜单中的偏好设置中设置 在Finder菜单中的偏好设置中选择边栏,勾选上设备中的硬盘. 再打开Finder,Fin

怎么往mac中finder个人收藏里添加文件夹

1.打开Finder,点击左上角finder偏好设置 2.选择边栏 3.如果侧栏中没有的文件夹,直接长按文件夹直接拖入.

解决myeclipse项目中,多出的WebContent文件夹

由于通过svn导入项目,导致项目中多出WebContent文件夹,而在此之前正常的是WebRoot文件夹.这个WebContent删了之后还会自己冒出来. 直到我发现篇博客:http://blog.sina.cn/dpool/blog/s/blog_525960510100jo0j.html?vt=4 于是在Navigator中查找 1.调出Navigator窗口 2.快捷键全局查找  Ctrl+H 3.File Search 找到了之后  .classpath .org.eclipse.wst

asp.net项目中通过Web.config配置文件及文件夹的访问权限!

描述:在开发中我们通常会碰到这样的问题,例如:在项目的根目录下面有一个文件或者文件夹需要用户登陆后才能访问.如果用户在没有登录的情况下访问该文件或者该文件夹下面的文件时,直接拦截重定向到对应的登陆页面. 例一: 我想让用户在访问我的程序的Admin文件夹下的页面时需要登录,而在访问其他页面时则不需要,也就是说Admin文件夹下的文件拒绝匿名访问. 下面是配置根目录下的web.config文件中关于授权验证的配置. [xhtml] view plaincopy <system.web> <

File类中的一些属性 添加删除文件夹

import java.io.File; import java.io.IOException; public class FileD { public static void main(String[] args) throws IOException {        fun();                 System.out.println();                fun1();  System.out.println();               fun2();

修复Maven项目中缺少的java或test文件夹

1.在Maven项目上右键,①点击Build Path:②点击Configure Build Path ... 2.①点击Libraries:②点击JRE System Library:③点击Edit,进行编辑:④弹出对话框后,选中Alternate JRE,并选择合适的jdk:⑤.⑥点击Finish和Apply后,缺少的文件夹会自动生成 原文地址:https://www.cnblogs.com/husteryzc/p/9319345.html

nodejs 将不同文件夹中的视频整合到一个文件夹中

var fs = require("fs") var path = require("path") var listRealPath = path.resolve(__dirname); var newPath = path.resolve(__dirname+'/newFile'); // 整合到 新文件夹的名称 需要手动创建 或者更改为已存在的名称 var formatList = ['avi', 'mp4', 'mov', 'rmvb', 'mkv']; re

PHP如何创建文件夹(mkdir的用法,mkdirs的语法)【转】

(PHPmkdir如何创建多级目录) ?? 在开始之前,我先说明一下,可能许多朋友与我一样认为只要给一个路径,mkdir就可以创建文件夹,其它不是那样,单个的MKDIR只能创建一级目录,对于多级的就不行了,那如何用mkdir来创建呢?先我抄一段手册上的有关mkdir的描述,如下: 说明 bool mkdir ( string pathname [, int mode [, bool recursive [, resource context]]] ) 尝试新建一个由 pathname 指定的目录

权限对于文件和文件夹的意义

权限对于文件的重要性 linux里的文件一般是文本文件,数据库内容文件,二进制文件. 因此权限对于文件的意义是: r:读取此档案的内容 w:编辑,新增或者修改档案的内容(但是不包含删除改档案) x:使该档案有被系统执行的权限 权限对于文件夹的重要性 r:具有读取目录列表结构的权限,可以查看该目录下包含拿些文件‘ w:可以在该目录下建立新的文件和目录:删除该目录下已存在的文件和目录:对该目录下的文件和目录进行更名:移动该目录下文件和目录的位置. x:有该权限就可以使用cd命令进入该目录