1. 程式人生 > >Android開發中libs包下面的mips、armeabi、armeabi-v7a和x86

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 打包的 SIMD 處理的圖表

使用 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 暫存器檔案,可有效處理資料並儘可能減少對記憶體的訪問,從而增加了資料吞吐量。

如何使用 NEONOpenMAX 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 暫存器。