1. 程式人生 > >關於Android的.so檔案你所需要知道的

關於Android的.so檔案你所需要知道的

原文連結

早期的Android系統幾乎只支援ARMv5的CPU架構,你知道現在它支援多少種嗎?7種!

Android系統目前支援以下七種不同的CPU架構:ARMv5,ARMv7 (從2010年起),x86 (從2011年起),MIPS (從2012年起),ARMv8,MIPS64和x86_64 (從2014年起),每一種都關聯著一個相應的ABI。

應用程式二進位制介面(Application Binary Interface)定義了二進位制檔案(尤其是.so檔案)如何執行在相應的系統平臺上,從使用的指令集,記憶體對齊到可用的系統函式庫。在Android 系統上,每一個CPU架構對應一個ABI:armeabi,armeabi-v7a,x86,mips,arm64- v8a,mips64,x86_64。

為什麼你需要重點關注.so檔案
如果專案中使用到了NDK,它將會生成.so檔案,因此顯然你已經在關注它了。如果只是使用Java語言進行編碼,你可能在想不需要關注.so文 件了吧,因為Java是跨平臺的。但事實上,即使你在專案中只是使用Java語言,很多情況下,你可能並沒有意識到專案中依賴的函式庫或者引擎庫裡面已經嵌入了.so檔案,並依賴於不同的ABI。

例如,專案中使用RenderScript支援庫,OpenCV,Unity,android-gif-drawable,SQLCipher等,你都已經在生成的APK檔案中包含.so檔案了,而你需要關注.so檔案。

Android應用支援的ABI取決於APK中位於lib/ABI目錄中的.so檔案,其中ABI可能是上面說過的七種ABI中的一種。

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

我只能粗略理解到這裡。
繼續學習啊!!!