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 技術可無縫用于其本身的獨立管道和寄存器文件。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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这样的女人下不下贱?
- 下一篇: 女人微信个性签名唯美