简介

在Android日常的开发过程中有的项目需要引入第三方的库,有时候大家可能会在libs文件夹下看到

mips、armeabi、armeabi-v7a和x86这四个文件夹。那么这三个文件夹下面的包是干什么用的?

这三个包下面存放的用C编译的本地库文件(各类『.so』文件)。

mips、armeabi、armeabi-v7a和x86都表示CPU的类型。一般的手机或平板都是用arm的cpu。不同的cpu的特性不一样,armeabi就是针对普通的或旧的; arm v5 cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu。

mips、armeabi、armeabi-v7a和x86到底是什么

mipsMIPS是世界上很流行的一种RISC处理器。MIPS的意思是“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),

其机制是尽量利用软件办法避免流水线中的数据相关问题。

armeabi:默认选项,将创建以基于 ARM* v5TE 的设备为目标的库。 具有这种目标的浮点运算使用软件浮点运算。 使用此 ABI (二进制接口)

创建的二进制代码将可以在所有 ARM* 设备上运行。所以armeabi通用性很强。但是速度慢

armeabi-v7a:创建支持基于 ARM* v7 的设备的库,并将使用硬件 FPU 指令。armeabi-v7a是针对有浮点运算或高级扩展功能的arm v7 cpu。

x86:支持基于硬件的浮点运算的 IA-32 指令集。x86是可以兼容armeabi平台运行的,无论是armeabi-v7a还是armeabi,同时带来的也是性能上的损耗,

另外需要指出的是,打包出的x86的so,总会比armeabi平台的体积更小。

总结

如果项目只包含了 armeabi,那么在所有Android设备都可以运行; 如果项目只包含了 armeabi-v7a,除armeabi架构的设备外都可以运行;

如果项目只包含了 x86,那么armeabi架构和armeabi-v7a的Android设备是无法运行的; 如果同时包含了 armeabi, armeabi-v7a和x86,

所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,同时也会导致包变大。

扩展知识

NEON

通过干净方式构建的 NEON 技术可无缝用于其本身的独立管道和寄存器文件。

NEON 技术是 ARM Cortex™-A 系列处理器的 128 位 SIMD(单指令,多数据)架构扩展,旨在为消费性多媒体应用程序提供

灵活、强大的加速功能,从而显著改善用户体验。它具有 32 个寄存器,64 位宽(双倍视图为 16 个寄存器,128 位宽。)

NEON 指令可执行“打包的 SIMD”处理:

  • 寄存器被视为同一数据类型元素矢量
  • 数据类型可为:签名/未签名的 8 位、16 位、32 位、64 位单精度浮点数
  • 指令在所有通道中执行同一操作

使用 NEON 技术的 ARM Cortex™-A 系列处理器,以及 ARM 的 Mali 多媒体硬件解决方案可用于多媒体应用,

范围从智能手机和移动计算设备到 HDTV。

NEON的优点

NEON 增强了用户体验
NEON 可增强许多多媒体用户体验:
观看任意格式的任意视频
编辑和强化捕获的视频 – 视频稳定性
锯齿消除渲染和合成
游戏处理
快速处理几百万像素的照片
语音识别
强大的多通道高保真音频处理
NEON 的特征和优点
NEON 支持用于 Internet 应用程序的范围广泛的多媒体编解码器:
许多软编解码器标准:MPEG-4、H.264、On2 VP6/7/8、Real、AVS
对于各种格式的正常大小的“Internet 流”解码来说,是理想的解决方案
不仅仅针对编解码器,还适用于 2D 和 3D 图形和其他矢量处理
提供现有工具、操作系统支持和生态体系支持
所需周期减少:
NEON 可使复杂视频编解码器的性能提升 60-150%
单个简单 DSP 算法可实现更大的性能提升(4 倍 -8 倍)
处理器可更快进入睡眠状态,从而在整体上节约了动态功耗 
NEON 技术的大量元素能够提高性能并简化软件开发过程,如: 
通过对齐和非对齐数据访问,可对 SIMD 操作进行有效的矢量化。
清晰的指令集架构,设计用于自动矢量化编译器和手动编码。
有效访问打包数组,如 ARGB 或 xyz 坐标
支持整数和浮点操作,以确保适合从编解码器、高性能计算到 3D 图形等广泛应用领域。
与 ARM 处理器紧密结合,提供单指令流和内存的统一视图,从而能够提供一个具有更简单工具流的开发平台目标。nbsp;
通过具有双 128 位/64 位视图的大型 NEON 寄存器文件,可有效处理数据并尽可能减少对内存的访问,从而增加了数据吞吐量。

如何使用 NEON
OpenMAX DL 库:
加速 AV 编解码器的建议方法
以源格式释放的库,在 ARM 网站上免费提供
支持以下格式:MPEG-4 简单配置文件、H.264 基准、JPEG、MP3、AAC
支持以下功能:FIR、IIR、FFT、点积、色彩空间转换、de-blocking.de-ringing、旋转、缩放、合成
矢量化编译器:
使用现有源代码自动搜索 NEON SIMD
受 ARM RealView 开发套件(v3.1 Pro 及更高版本)支持
在 2007q3 及更高版本中受 gcc 支持
C 内部函数:
C 函数调用接口至 NEON 操作
支持 NEON 支持的所有数据类型和操作
在 ARM RealView 开发套件(3.1 及更高版本)和 gcc 2007q3 及更高版本中受支持
汇编器:
针对确实需要在最低级别进行优化的用户
在 ARM 的 RealView 开发套件(3.1 及更高版本)和 gcc 2007q3 及更高版本中受支持

开源社区中的 NEON 支持
当前,在以下开源项目中支持 NEON:
Android – NEON 优化
使用 NEON,Skia 库 S32A_D565_Opaque 的速度加快了 5 倍
Ubuntu 09.04 支持 NEON:
关键共享库的 NEON 版本
Bluez – 官方 Linux 蓝牙协议堆栈
NEON SBC 音频编码器
Pixman(Cairo 2D 图形库的一部分)
合成/alpha 混合
X.Org、Mozilla Firefox、Fennec 和 Webkit 浏览器
例如,使用 NEON 后,fbCompositeSolidMask_nx8x0565neon 的速度提高了 8 倍
ffmpeg - libavcodec
用于众多 Linux 分发版的 LGPL 媒体播放器
视频:MPEG-2、MPEG-4ASP、H.264 (AVC)、VC1
音频:Ogg Vorbis
x264 – Google 2009 年度编程之夏
GPL h.264 编码器 – 例如,针对视频会议

SSE: 英特尔推出的类似 NEON 的工具

SSE 指面向英特尔架构(IA)的SIMD 流指令扩展。 目前,英特尔® 凌动™ 最高支持 SSSE3(补充 SIMD 流指令扩展 3)。 凌动暂不支持 SSE4.x。

后者也是一个 128 位引擎,用于打包浮点数据。 这一执行模式开始于 MMX 技术。SSx 是较新的技术,取代了 MMX。。 如欲了解详细信息,

请参阅英特尔《IA-32 和 IA-64 软件开发人员手册》中的“第一卷: 基础架构”部分。 目前,SSE 概述部分在 5.5 节。 它提供 SSE、SSE2、

SSE3 和 SSSE3 的操作码。注意,数据运算通常会涉及到处理基于精度的打包浮点数值;并且需要在 XMM 寄存器之间,或在这些寄存器

与内存之间批量传输数据。 XMM 寄存器主要用于取代 MMX 寄存器。

SSE的官方介: http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html。

转载自:http://blog.csdn.net/loveyaozu/article/details/51205820

Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86相关推荐

  1. android studio 把libs包打包到apk中,设置应用以32bit去读取.so文件

    android studio 把libs包打包到apk中: 只需在当前module里的build.gradle添加下列配置: sourceSets {main {jniLibs.srcDirs = [ ...

  2. android 4.4 禁止下拉,Android开发中禁止下拉式的实现技巧

    我们开发项目的时候,经常会看到禁止的情况,而Android开发中并没有直接调用的接口,下面是爱站技术频道小编就给大家介绍的Android开发中禁止下拉式的实现技巧,希望网友们喜欢! 分享给大家供大家参 ...

  3. android listview下拉动画效果,Android开发中利用ListView实现一个渐变式的下拉刷新动画...

    Android开发中利用ListView实现一个渐变式的下拉刷新动画 发布时间:2020-11-23 16:50:31 来源:亿速云 阅读:80 作者:Leah 本篇文章给大家分享的是有关Androi ...

  4. android权限--android开发中的权限及含义(下)

    android权限--android开发中的权限及含义(下) android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权 ...

  5. Android中layout目录的作用,Android 开发中layout下的子文件夹

    Android 开发中layout下的子文件夹 发布时间:2020-10-25 11:42:36 来源:脚本之家 阅读:71 作者:厚土火焰山 如果一个项目内有很多个界面,那么在layout下会有太多 ...

  6. android开发中遇到的问题汇总

    android开发中遇到的问题汇总(五),android汇总127.ANDROID仿IOS时间_ANDROID仿IOS弹出提示框 http://dwtedx.com/itshare_297.html1 ...

  7. 在android开发中使用multdex的方法-IT蓝豹为你整理

    在android开发中使用multdex的方法-IT蓝豹为你整理 Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个, ...

  8. android中资源文件的两种访问方式,在android开发中进行数据存储与访问的多种方式介绍...

    在android开发中进行数据存储与访问的多种方式介绍 更新时间:2013年06月07日 16:24:23   作者: 很多时候我们的软件需要对处理后的数据进行存储或再次访问,Android为数据存储 ...

  9. Android开发中虚拟位置定位、应用双开、IP代理检测

    Android开发中虚拟位置定位.应用双开.IP代理检测 1.虚拟位置定位.应用双开原理 目前市面上的多开App的原理类似,都是以新进程运行被多开的App,并hook各类系统函数,使被多开的App认为 ...

最新文章

  1. 原创 | 初学者友好!最全算法学习资源汇总(附链接)
  2. cocos2dx多线程以及线程同步 与 cocos2dx内存管理与多线程问题
  3. python画三维温度散点图-python 绘制三维图形、三维数据散点图
  4. 记录no static method cannot be reference
  5. 论文浅尝 | ​ADRL:一个基于注意力机制的知识图谱深度强化学习框架
  6. 简单的整人代码(你是猪,文章末附带文件)
  7. 线性规划图解法求最优解_线性规划的图解法6.ppt
  8. 40个Qt学习小案例
  9. linux qt 屏幕亮度,调整14.04.1 屏幕亮度
  10. 爱思助手更新后无法连接服务器,爱思助手无法连接手机怎么办 爱思助手连接失败问题解决办法...
  11. 阿里巴巴淘宝用户行为数据集,UserBehavior表实战分析
  12. 跑跑卡丁车Bingo喜当托儿纪念,2022/04/30,23:38:56
  13. 从Alignment 和 Uniformity的角度理解对比表征学习
  14. 于的繁体字有几种写法_“龙”的繁体字有几种写法?
  15. EXCEL散点图怎么做
  16. linux中 #chmod –R 777 * 是什么意思
  17. HTML表格翻页效果-洋葱先生-杨少通
  18. 运行内存那么大怎么清理
  19. 【网络】https单向认证和双向认证
  20. 数据仓库与数据挖掘-挖掘高价值B站up主案例

热门文章

  1. 敲代码括号技巧_阅码神奇Souceinsight使用小技巧总结
  2. python write和writelines的区别_简单了解Python write writelines区别
  3. python3中format方法_python3 自定制format格式化,很多很多的内置方法。。。。。。。。。。。...
  4. php将数组最后一个单元弹出,php array_pop()数组函数将数组最后一个单元弹出(出栈)...
  5. 一、网页端文件流的传输
  6. python绝对路径的区别_python学习:绝对路径和相对路径
  7. PCL点云变换与移除NaN
  8. Learn OpenGL (四):纹理
  9. 最精简写法→去掉任意多个空行
  10. UE5真实环境设计入门学习教程