so.png

1.区别

这三者都表示的是CPU类型,早期的Android系统几乎只支持ARMv5的CPU架构,但是现在已经有7种了。ARMv5,ARMv7 (从2010年起),x86 (从2011年起),MIPS (从2012年起),ARMv8,MIPS64和x86_64 (从2014年起),每一种都关联着一个相应的ABI(应用程序二进制接口(ApplicationBinary Interface)定义了二进制文件(尤其是.so文件)如何运行在相应的系统平台上,从使用的指令集,内存对齐到可用的系统函数库)。Android现在的主流CPU是armeabi-v7a。armeabi-v7a是针对有浮点运算或高级扩展功能的ARMv7 CPU。

2.Android设备如何加载.so文件

当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。不同CPU架构的Android手机加载时会在libs下找自己对应的目录,从对应的目录下寻找需要的.so文件;如果没有对应的目录,就会去armeabi下去寻找,如果已经有对应的目录,但是如果没有找到对应的.so文件,也不会去armeabi下去寻找了。

以x86设备为例,x86设备会在项目中的 libs文件夹寻找是否含有x86文件夹,如果含有x86文件夹,则默认为该项目有x86对应的so可运行文件,只有x86文件夹而文件夹下没有so,程序运行也是会出现findlibrary returned null的错误的;如果工程本身不含有x86文件夹,则会寻找armeabi或者armeabi-v7a文件夹,兼容运行。以armeabi-v7a设备为例,该Android设备当然优先寻找libs目录下的armeabi-v7a文件夹,同样,如果只有armeabi-v7a文件夹而没有 so也是会报错的;如果找不到armeabi-v7a文件夹,则寻找armeabi文件夹,兼容运行该文件夹下的so,但是不能兼容运行x86的so。所以项目中如果只含有x86的so,在armeabi和armeabi-v7a也是无法运行的。以上就是不同CPU架构运行时加载so的策略。

3.适配不同的平台

目前主流的Android设备是armeabi-v7a架构的,然后就是x86和armeabi了。如果同时包含了 armeabi,armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,但是同时也会导致包变大。

armeabi-v7a是可以兼容armeabi的,而v7a的CPU支持硬件浮点运算,目前绝大对数设备已经是armeabi-v7a了,所以为了性能上的更优,就不要为了兼容放到armeabi下了。x86也是可以兼容armeabi平台运行的,另外需要指出的是,打出包的x86的so,总会比armeabi平台的体积更小,对于性能有洁癖的童鞋们,还是建议在打包so的时候支持x86。

4.第三方平台的.so库怎么处理

第三方的类库只提供了armeabi下的.so文件,我们项目里适配了armeabi-v7a和x86,如果不在对应的文件下放对应的.so文件,就可能导致某些Android设备会出一些问题,我们可以复制armeabi下得.so文件到不同的文件夹下。如果第三方提供了不同平台的.so文件,则复制不同平台的.so文件到项目中对应的文件夹下即可。

关于.so文件之前有一个坑,svn会把提交的so文件过滤掉,在接第三方SDK的时候通过SVN更新了文档,但是没有注意到少了几个so文件,浪费了大把的时间去找原因。记得去掉svn对so的忽略!!!

Subversion忽略设置.png

文章来源于: Android开发经验谈,版权归原作者所有,如有侵权,请联系 guanwang@163yun.com 删除。

x86 android armv7,说说Android项目中的armeabi,armeabi-v7a和x86相关推荐

  1. uniapp android原生,在uni-app项目中集成Android原生工程

    [TOC] # 在uni-app项目中集成Android原生工程 按照官方的方案,我们如果进行本地打包的话,需要重新创建一个Android原生工程,于是就会导致我们管理多个项目,切来切去的也麻烦. 经 ...

  2. android+jacoco多模块项目中统计子模块代码覆盖率

    上一次做了单项目的代码覆盖率统计,但是在实际的项目中,都是已模块开发为主. 研究了一下怎么去统计子模块中的代码覆盖率. 整体思路: 1:既然是多模块的代码覆盖率统计,所以子模块必须也要是用jacoco ...

  3. android的前端实现,项目中的小实现 (安卓, javaweb, 前端)

    会不定时更新,有些项目需要重构,可能造成链接失效 Android 第30行,通过自定义的ImagePipelineConfig和OkHttpClient,在自定义的OkHttpClient中加入SSL ...

  4. armeabi v5 v7a v8a x86对应的so库详解

    ABI:应用程序二进制接口,Application Binary Interface. armeabi-v7a: 针对有浮点运算或高级扩展功能的arm v7 cpu,32位ARM设备.第7代及以上的 ...

  5. androidstudio使用mac字体_如何在Android Studio编写的项目中使用自定义字体

    有很多方法可以在字段上设置自定义字体系列,我使用如下所示. 要将字体添加为资源,请在Android Studio中执行以下步骤: 1)右键单击res文件夹,然后转到新建> Android资源目录 ...

  6. android 导入数据库到项目中

        在android开发中,通常都是自己创建数据库然后开始开发使用,但难免会用别人做好的数据库中的数据,我们该怎么使用呢?     step1:         在module中创建一个asset ...

  7. Android Studio项目中文件错乱问题

    文章目录 问题描述 解决方法 问题描述 今天打开Android Studio,发现项目中一些文件都变得错乱了,就像这样: 左侧图片是在文件夹中使用NotePad++打开的,右侧是Android Stu ...

  8. android studio zbar,Android Studio 0.2.6和ZBar项目设置

    我使用的是最新的Android Studio 0.2.6和最新的ZBar Android SDK.到目前为止我做了什么: 创建了一个名为QRTest的全新项目 在我的项目中创建了一个名为libs的文件 ...

  9. android菜单更改,Android修改分析:删除设置中菜单

    Android修改分析:删除设置中菜单 设置中的菜单主要分为两种添加方式: `` 1.静态加载 所谓自主添加,就是通过xml文件,自主通过添加布局到Fragment.Activity等加载到设置菜单中 ...

  10. android acra使用,Android ACRA - 适用于Android的应用崩溃报告

    我想弄清楚如何在Android Studio的测试项目中添加ACRA.Android ACRA - 适用于Android的应用崩溃报告 本文后面(它解释了如何在Eclipse中实现)https://g ...

最新文章

  1. Linux虚拟化介绍
  2. matlab 2010 工具箱,Matlab2010下使用FULLBNT工具箱實現簡單的靜態貝葉斯網絡及推理...
  3. 第六章 计算机网络与i教案,大学计算机基础教案第6章计算机网络基础与应用.docx...
  4. 潍坊经贸每年单招计算机的成绩,2018潍坊职业学院单招成绩查询时间
  5. shell中返回值是1为真还是假_shell脚本中判断上一个命令是否执行成功
  6. 专家:番茄花园洪磊最高可判刑7年
  7. docker修改php.ini,docker部署更改php的upload_max_filesize
  8. 使用tensorflow object detection API 训练自己的目标检测模型 (二)labelImg的安装配置过程
  9. swift 动画合集
  10. Windows server 2012远程桌面会话主机和远程桌面授权,server2012
  11. 机器学习做自动聊天机器人_聊天机器人业务领袖指南
  12. 总结-模型评价指标的定义(基于CatBoost文档)
  13. 做一个文字跟随鼠标java_JavaScript实现文字跟随鼠标特效
  14. 我想用组态王与电能表通讯
  15. [转载]1986年吴图南 马岳梁 吴英华 孙剑云等名家大師
  16. Nvidia GeForce GTX 1650不支持OpenGL4.6
  17. SC16IS752调试
  18. 磁盘分区、格式化及 LVM 管理
  19. 用php表示掷骰子两次比大小,python学习之掷骰子游戏
  20. 内网如何连接外网,注意!!

热门文章

  1. linux kali局域网远程桌面,kali使用rdesktop连接Windows远程桌面
  2. java redis hscan_如何在Redis中使用HSCAN命令?
  3. TeeChart基础使用手册
  4. 利用quietHDD解决硬盘C1增长以及异响问题
  5. HiC软件安装篇之Lachesis
  6. 手把手学习企业型网站之三firework做顶部的banner+nav
  7. 尚硅谷 硅谷新闻_硅谷如何将真正的创新变成一种夸大的幻想
  8. 魔兽世界架设 mysql_魔兽世界单机版局域网的架设方法
  9. APUE 第四章总结
  10. 大学一年级计算机组成语结构试题,一年级下册期末复习习题