1. 程式人生 > >你必須知道的ABI和CPU關係

你必須知道的ABI和CPU關係

1、 大部分cpu都支援多於一種的ABI。
2、 當一個應用安裝在裝置上,只有該裝置支援的CPU架構對應的.so檔案會被安裝。

3、

這裡寫圖片描述
注意:上表格中的空白部分,是我不知道它是否支援,極有可能是不支援

解析: x86裝置上,選擇ABI的優先順序

libs/x86目錄中如果存在.so檔案的話,會被安裝
如果不存在,則會選擇armeabi-v7a中的.so檔案
如果也不存在,則選擇armeabi目錄中的.so檔案
x86裝置能夠很好的執行ARM型別函式庫,但並不保證100%不發生crash,特別是對舊裝置,因為是執行在x86裝置上模擬arm的虛擬層上。

4、 64位裝置(arm64-v8a, x86_64, mips64)能夠執行32位的函式庫,但是以32位模式執行,在64位平臺上執行32位版本的ART和Android元件,將丟失專為64位優化過的效能(ART,webview,media等等)。

5、 最好是針對特定平臺提供相應平臺的二進位制包,這種情況下執行時就少了一個模擬層(例如x86裝置上模擬arm的虛擬層),從而得到更好的效能(歸功於最近的架構更新,例如硬體fpu,更多的暫存器,更好的向量化等)。

6、 會安裝優先順序較高的ABI目錄,則其它優先順序較低的ABI目錄(包括其它module中的ABI目錄),都無法安裝。例如:在cpu是ARMv7架構的手機上,如果檢測到armeabi-v7a,就會選擇安裝armeabi-v7a,則armeabi下的檔案,都無法安裝了。

7、 相應的ABI二進位制檔案,要放進相應的ABI目錄中

8、一般情況下不要簡單得修改架構目錄名

我們可以通過Build.SUPPORTED_ABIS得到根據偏好排序的裝置支援的ABI列表。但你不應該從你的應用程式中讀取它,因為Android包管理器安裝APK時,會自動選擇APK包中為對應系統ABI預編譯好的.so檔案,如果在對應的lib/ABI目錄中存在.so檔案的話。