程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Application.mk中APP_ABI 的含義

Application.mk中APP_ABI 的含義

編輯:C++入門知識

我們在編寫JNI代碼時有一個可選的文件Application.mk ,這個文件你可以不創建,但是有時候是有必要寫一個這樣的文件的。

Application.mk文件用於描述應用程序本身的一些屬性信息,如應用程序依賴哪些庫,應用程序的根目錄,應用程序運行在哪些類型指令集的CPU下,還有一些編譯選項,

在此文件中定義的東西會應用於整個應用程序包括android.mk也會用到這裡面的選項。

 


如果你不寫此文件,會默認編出所有android.mk中寫的libs / modules APP_ABI會默認指定為armeabi

下面我們主要介紹APP_ABI的用途。

 


首先市面上的android智能設備很多也很雜,各種類型各個廠家的芯片,但都是基於某種指令集來開發出來的,這裡的ABI(Application Binary Interface)實際就是指應用程序基於哪種指令集來進行編譯,官方文檔說其實是以下幾點不同:


- the CPU instruction set that the machine code should use

  - the endianness of memory stores and loads at runtime

  - the format of executable binaries (shared libraries, programs, etc...)
    and what type of content is allowed/supported in them.

  - various conventions used to pass data between your code and
    the system (e.g. how registers and/or the stack are used when functions
    are called, alignment constraints, etc...)

  - alignment and size constraints for enum types, structure fields and
    arrays.

  - the list of function symbols available to your machine code at runtime,
    generally from a very specific selected set of libraries.


我們能用到的ABI 也就四種  armeabi armeabi-v7a x86 和mips 前兩者最常用到。

在編譯的時候你可以指定其中的一種或者幾種,如果指定了幾種,這時候打包到APK後這個APK被稱為“胖二進制”,也就是它包含了幾種ABI類型的lib

當APK被安裝到設備上的時候,android系統有這樣一個機制:

系統支持哪些ABI類型它自己是知道的,它們會將最適合機器性能發揮的ABI類型標記位'primary' 把剩下的也支持的標記為‘secondary’

例如

CPU 工藝為 ARMv5TE-based 的CPU只有'primary'  為armeabi  沒有'secondary'而類型為ARMv7-based的CPU 'primary'  為armeabi-v7a  'secondary'為armeabi
應用程序安裝的時候系統首先檢查lib/<primary-abi>/libxx.so 如果有的話就將此處的lib隨應用程序copy到/data/app/下面這個大家應該知道第三方應用的安裝目錄

如果沒有的話,而機器有secondary ,就檢查lib/<secondary-abi>/libxx.so

 


所以這就是為什麼我們不用寫application.mk 而應用程序能在amrv7 的機器上面跑得好好的,但是這有可能沒有發揮到amrv7的最有效的性能。

所以如果是我寫應用程序我會指定兩個或更多(當然這可能造成APK體積增大,這個要自己取捨)

 


另外推薦一個工具查看android系統的硬件信息 z-devicetest  ,可以看到CPU型號等具體信息。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved