Android之64位和32位區(qū)分

image.png

..

ABI 是什么

在Android編碼時候 ,我們經(jīng)常會看到ABI 。ABI的意思是 Application Binary Interface 的縮寫。

不同 Android 手機使用不同的 CPU,因此支持不同的指令集。CPU 與指令集的每種組合都有其自己的應用二進制界面(或 ABI)。 ABI 可以非常精確地定義應用的機器代碼在運行時如何與系統(tǒng)交互。 您必須為應用要使用的每個 CPU 架構指定 ABI。

常用的abi有:

  1. armeabi 對應著 ARMV5和ARMV6架構
  2. armeabi-v7a - 對應著 ARMV7a架構,是32位的尋址長度,里面放置32位系統(tǒng)上運行的so庫
  3. armeabi-v8a - 對應著 ARMV8架構,64位尋址長度,里面放置64位的so
  4. x86 對應 x86架構(PC機的架構),里面放置x86上運行的so
  5. x86_64 對應著x86_64架構,里面放置x86_64上運行的so

可以通過Build.SUPPORTED_ABIS得到根據(jù)偏好排序的設備支持的ABI列表。

因為Android包管理器安裝APK時,會自動選擇APK包中為對應系統(tǒng)ABI預編譯好的.so文件,不同的ABI,針對不同的cpu架構有不同的優(yōu)先權例如: x86設備上,libs/x86目錄中如果存在.so文件的話,會被安裝,如果不存在,則會選擇armeabi-v7a中的.so文件,如果也不存在,則選擇armeabi目錄中的.so文件。x86設備能夠很好的運行ARM類型函數(shù)庫,但并不保證100%不發(fā)生crash,特別是對舊設備。


image.png

64位設備(arm64-v8a, x86_64, mips64)能夠運行32位的函數(shù)庫,但是以32位模式運行,在64位平臺上運行32位版本的ART和Android組件,將丟失專為64位優(yōu)化過的性能(ART,webview,media等等)

如何區(qū)分64位app 和32位app

當下載安裝一個App之后,從Launcher啟動該應用,系統(tǒng)會由Zygote分叉出一個子進程來提供App運行的虛擬機和Runtime環(huán)境。

與32位系統(tǒng)不同的是,在64系統(tǒng)中會同時存在兩個Zygote進程——zygote和zygote64,分別對應32位和64位應用。

所以,要進行App的32/64位檢測,只需要看它的父進程是哪個Zygote即可。

image.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容