Android CPU架構及so庫兼容問題總結

CPU架構分類

  1. armeabi
  2. armeabi-v7a(目前大部分機器)
  3. arm64-v8a (高端機型)
  4. x86
  5. x86_64
  6. mips
  7. mips64

Android手機大部分采用的是ARM架構的CPU.

CPU之間的架構兼容

ARMv5 設備:只支持armeabi

ARMv7 設備:支持 armeabi 和 armeabi-v7a

ARMv8 設備:支持 armeabi-v7a、armeabi 和 arm64-v8a

X86 設備:支持 armeabi(性能有所損耗) 和 x86

x86_64 設備:支持 x86 和 x86_64

mips 設備: 支持 mips

mips_64 設備:支持 mips 和 mips_64

Android中設備加載so策略

  1. 不同CPU架構的android手機加載時會在libs下找自己對應的目錄,從對應的目錄下尋找需要的.so文件;
  2. 如果沒有對應的目錄,就會去armeabi下去尋找,如果已經有對應的目錄,卻沒有找到對應的.so文件,也不會去armeabi下去尋找了;

以x86設備為例,x86設備會在項目中的 libs文件夾尋找是否含有x86文件夾,如果含有x86文件夾,則默認為該項目有x86對應的so可運行文件,只有x86文件夾而文件夾下沒有so,程序運行也是會出現 find library 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的策略。

針對不同平臺,如何去適配

目前主流的Android設備主要是 armeabi-v7a 架構的,然后是 x86 和 armeabi 了。如果同時包含了 armeabi, armeabi-v7a和x86,所有設備都可以運行,程序在運行的時候去加載不同平臺對應的so,這是較為完美的一種解決方案,但是有時候為了減少apk的大小,不會同時設置 armeabi, armeabi-v7a 和 x86。根據不同的情況,可以進行不同的適配,

1.只適配 armeabi-v7a,因為目前主流機型是 ARMv7,并且 ARMv8 設備也向下兼容了armeabi-v7a,
Facebook、WhatsApp、王者榮耀等就是只適配了armeabi-v7a。(Google play store下載 Native libs Monitor 進行查看)。

2.只適配 armeabi,因為 ARMv7 、ARMv8 還是 x86 都兼容 armeabi,但是性能都會有些損耗,例如ARMv7 支持硬件浮點運算等沒法體現,x86 支持 armeabi 同樣具有相應的損耗。微信使用了此策略。

3.同時適配 armeabi-v7a 和 armeabi,既能夠支持所有 ARM 架構,同時又能具有 ARMv7 支持硬件浮點運算等特性,例如Line等應用。

4.同時適配 x86 和 armeabi,既能支持所有 ARM 架構,又能支持x86架構,唯一的缺點就是沒有了ARMv7 支持硬件浮點運算等一系列特性,例如QQ.

5.同時適配 armeabi, armeabi-v7a 和 x86,在性能方面來說是較為完美的方案,只是APK的大小也會隨之的變大。

附:各CPU架構簡介

ARM架構屬于RISC指令集,指令集精簡、指令等長,雖然這樣的設計可以提高處理效率,但在遇到復雜的指令后,就需要更多的簡單指令來堆砌復雜任務;ARM從來只是設計低功耗處理器。其宗旨是設計低功耗處理器,這是他們的強項。

armeabi:ARM架構的默認選項,支持基于 ARM* v5TE 的設備,支持軟浮點運算,但不支持硬件輔助浮點運算,支持所有的 ARM* 設備。

armeabi-v7a:armeabi-v7a 向下兼容,在兼容 armeabi 的基礎上,支持基于 ARM* v7 的設備,支持硬件 FPU 指令,支持硬件浮點運算,目前大部分機器都屬于armeabi-v7a。

arm64-v8a:arm64-v8a向下兼容 armeabi 和 armeabi-v7a,最主要的區別在于 arm64-v8a 支持64位,在 MIPS64 架構上增加了 ARMv7 架構中已經擁有的的TrustZone技術、虛擬化技術及NEON advanced SIMD技術等特性(ARM收購MIPS)。架構中包含兩個執行狀態:AArch32(也就是我們常說的ARMv7)和AArch64(ARMv8),也就是說64位的ARM處理器中同時包含著32位的ARMv7和64位的ARMv8兩種架構,直接導致每種架構所擁有的晶體管減半。

X86構架是英特爾推出的一種復雜指令集,用于控制芯片的運行的程序,目前該構架的處理器已經廣泛運用在PC領域,由于X86構架的處理器芯片在性能上比較強勁,善于執行復雜工作,所以當英特爾進軍移動市場領域后(例如聯想K800),就出現了X86的架構。X86構架屬于典型的CISC,指令集豐富,指令不等長,善于執行復雜工作,更強調串行性能,它的整體運算能力要比只為移動而生的ARM架構強大,并且在PC領域已經廣泛應用,擁有深厚的技術背景。英特爾設計超高性能的臺式機和服務器處理器,并且的確做的不錯。

x86:英特爾推出的32位CPU架構,生成的二進制代碼可支持包含基于硬件的浮點運算的 IA-32 指令集,同時,x86機器基本上可以使用 intel 的 libhounini 項目直接在x86機器上運行僅含armeabi的動態庫代碼,也就會說x86機器對armeabi也能夠兼容,不過性能上會有些損耗。

x86_64:英特爾推出的64位CPU架構,向下兼容x86。

mips和mips_64:MIPS是一種高性能的嵌入式CPU構架,其出發點是高性能,主要用于路由器、貓等

總體來說,Android手機大部分采用的是ARM架構的CPU.

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容