Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86
简介
在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到底是什么
mips:MIPS是世界上很流行的一种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 技术是 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
相关文章:

【数据结构】判断一个单链表中各结点的值是否有序
count记录的是单链表的总长 count1记录的是升序的结点的个数 count2记录的是降序的结点的个数 如果count1或者count2等于count,那么就说明该序列是升序或者降序的。 稍加改进可以在准确判断是升序还是降序还是无序 (个人认为链表中只有一个结点或者…

MSSQL-最佳实践-行级别安全解决方案
title: MSSQL-最佳实践-行级别安全解决方案 author: 风移 摘要 在SQL Server安全系列专题月报分享中,我们已经分享了:如何使用对称密钥实现SQL Server列加密技术、使用非对称密钥加密方式实现SQL Server列加密、使用混合密钥实现SQL Server列加密技术和列…
浮点数运算原理详解
导读: 浮点数运算是一个非常有技术含量的话题,不太容易掌握。许多程序员都不清楚使用操作符比较float/double类型的话到底出现什么问题。 许多人使用float/double进行货币计算时经常会犯错。这篇文章是这一系列中的精华,所有的软件开发人员都…

vCenter的安装
转载于:https://blog.51cto.com/yht1990/1857211

【数据结构】双链表的应用
1、设计一个算法,在双链表中值为y的结点前面插入一个值为x的新结点,即使得值为x的新结点成为值为y的结点的前驱结点。 2、设计一个算法,将一个双链表改建成一个循环双链表。 #include <stdio.h> #include <stdlib.h>typedef st…

Eclipse for Tricore 的安装方法
1.安装JDK32位版 2.安装Eclipse for Tricore 32位版(应该也只有32位的) 3.OK(如果打开Tricore提示找不到JDK的话,在网上搜索如何配置JDK,修改环境变量) 注意:Eclipse的位数必须和JDK位数相同 转…
NDK JNI方式读写Android系统的demo(二)
NDK & JNI(方式读写Android系统的Demo) 大家都知道Android系统是一种基于Linux的自由及开放源码的操作系统,所以读写GPIO也可以直接用Linux那一套export/unexport方法,本文将介…

【数据结构】顺序串的插入算法,删除算法,连接运算,顺序串求子串算法
主函数自行添加 头文件 宏定义 #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 串的顺序存储 typedef struct {char str[MAXSIZE];int length; }seqstring; 顺序串的创建 void creat(seqstring *S) {char c;int i0;while((cgetchar())!\n){S-…

log4j日志记录级别是如何工作?
级别p的级别使用q,在记录日志请求时,如果p>q启用。这条规则是log4j的核心。它假设级别是有序的。对于标准级别它们关系如下:ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF。 举个栗子 下面的栗子明确指出如何可以过…

Kafka背后公司获1.25亿融资,估值超25亿美元
北京时间1月24日,开源Apache Kafka项目背后的公司Confluent在官方博客宣布进行了D轮融资,价值约为1.25亿美元,公司总估值高达25亿美元。 Confluent公司CEO Jay Kreps在博客中表示:我很高兴地宣布,Confluent已经募集了1…

深入学习jQuery描述文本内容的3个方法
前面的话 在javascript中,描述元素内容有5个属性,分别是innerHTML、outerHTML、innerText、outerText和textContent。这5个属性各自有各自的功能,且兼容性不同。jQuery针对这样的处理提供了3个便捷的方法,分别是:html(…
NDK JNI Android Studio开发与调试DEMO(三)(生成 .so 文件)
Android Studio NDK 开发与调试(生成 .so 文件) 温馨提示:如果你的 Android Studio 版本在 3.0以上 , 建议你用 cMake /ndk-build 的新姿势进行 NDK 开发 : https://developer.android.google.cn/index.html AS与g&am…
字符串的模式匹配 (朴素模式匹配算法 ,KMP算法)
字符串的模式匹配 寻找字符串p在字符串t中首次出现的起始位置 字符串的顺序存储 typedef struct {char str[MAXSIZE];int length; }seqstring; 朴素的模式匹配算法 基本思想:用p中的每一个字符去与t中的字符一一比较。 模式p 正文 t 如果匹配成功,…

框架页面jquery装载
转载于:https://www.cnblogs.com/moonsoft/p/10313309.html

NDKJNI Android 相关资料整理(四)
JNI/NDK开发指南 JNI/NDK开发指南(一)—— JNI开发流程及HelloWorld http://blog.csdn.net/xyang81/article/details/41777471 JNI/NDK开发指南(二)——JVM查找java native方法的规则 http://blog.csdn.net/xyang81/article/det…
【ACM】与全排列相关的STL函数 prev_permutation next_permutation
排列 与 全排列 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。 当mn时所有的排列情况叫全排列。如果这组数有n个,那么全排列数为n!个。 对于全排列的求解…

虚拟机无法使用网卡桥接模式
重装了好几遍操作系统,换了两个虚拟机,差点怀疑人生…… 最终的原因竟然是win10!!! 1.执行WINR 输入services.msc,打开服务管理器(回车)。 2.找到Device Install Service服务 启动此…

Azure自动化部署运维浅谈
本次来谈一谈如何在Azure中实现一些简单的自动化运维的需求,一般来讲自动化运维我们通过很多第三方的工具平台实现,比较流行的目前有很多,比如老牌的chef, puppet,新兴的PowerShell DSC, ansible。这些应该都是耳熟能详的了。那么在Azure平台…
NDK/JNI demo ( 五 ) ORB_SLAM2在Android上的移植过程
Android平台搭建和NDK环境配置 Android移植基础 NDK是集成的Android中调用C代码的工具包,核心是JNI(Java Native Interface)技术,具体这里略过不表。只说说NDK开发的基本步骤: 1. 编写Java代码:在Java中定义…

[Nancy On .Net Core Docker] 轻量级的web框架
.net core现在已经有了大的发展,虽然笔者现在已经从事python开发,但是一直在关注.net的发展,在逛博客园的时候,发现有大家都会提到Nancy这个框架,在简单的使用之后,发现竟然是如此的简单而优雅 public clas…

【算法】【ACM】深入理解Dijkstra算法(单源最短路径算法)
Dijkstra算法是用来求解从某个源点到其他各顶点的最短路径(单源最短路径)。 下面的Dijkstra算法的讲解都是基于这个有向图,在遇到其他问题可以类比。 算法的基本思想: 把图中的定点分成两组,第一组包括已确定最短路径…

智能POS常见问题整理
智能POS预警值为小于所设的数量,H5就会变为锁定状态 智能POS查看数据库方法: 商米D1:设置-存储设备和USB-内部存储设备-浏览-winboxcash tablet.db为智能POS数据库 Winbox文件夹内,为相应logcat文件,应用出现问题时&am…
解决安卓系统写入SD卡权限问题
1.需要用户手动赋予的权限( Dangerous Permissions) 所属权限组权限日历READ_CALENDAR日历WRITE_CALENDAR相机CAMERA联系人READ_CONTACTS联系人WRITE_CONTACTS联系人GET_ACCOUNTS位置ACCESS_FINE_LOCATION位置ACCESS_COARSE_LOCATION麦克风RECORD_AUDIO…

【ACM】【STL】stack应用
C Stacks(堆栈) C Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。 操作比较和分配堆栈empty()堆栈为空则返回真…

CHUCK手把手带你搞定OPENSTACK
以下是原文链接:http://blog.oldboyedu.com/openstack/转载于:https://blog.51cto.com/bovin/1858198

JVM基础面试题及原理讲解
2019独角兽企业重金招聘Python工程师标准>>> 本文从 JVM 结构入手,介绍了 Java 内存管理、对象创建、常量池等基础知识,对面试中 JVM 相关的基础题目进行了讲解。 写在前面(常见面试题) 基本问题 介绍下 Java 内存区域…
SLAM前端 ---------特征提取之ORB(ORB与SIFT与SURF)
ORB 论文翻译: 一种特征匹配替代方法:对比SIFT或SURF 1.ORB特征简介 ORB是Oriented FAST and Rotated BRIEF(oFAST and rBRIEF)的简称,ORB的名字已经说明了其来源,其实ORB特征是采用FAST方法来检测提取特…

oracle 内存分配和调优 总结
一直都想总结一下oracle内存调整方面的知识,最近正好优化一个数据库内存参数,查找一些资料并且google很多下。现在记录下来,做下备份。 一、概述: oracle 的内存可以按照共享和私有的角度分为系统全局区…

【ACM】Doubly Linked List(STL list)
题目链接:https://vjudge.net/problem/Aizu-ALDS1_3_C 这一题一开始的时候想的是用vector,超时 #include <iostream> #include <stack> #include <cstdio> #include <cstring> #include <queue> #include <vector>…

IOS获取焦点页面上移问题
var u navigator.userAgent; var flag; var myFunction; var isIOS !!u.match(/(i1;( U;)? CPU.Mac OS X/); if (isIOS) { document.body.addEventListener(focusin, () > { //软键盘弹起事件flag true;clearTimeout(myFunction); }) document.body.addEventListener(f…