以下內容節選自本書
編寫模塊的編譯文件,實際就是定義一系列以“LOCAL_”開頭的編譯變量,因此我們有必要弄明白這些變量的具體含義。下面是一些經常使用的LOCAL_編譯變量的說明:
變量名 |
說明 |
LOCAL_ASSET_FILES |
編譯APK文件時用於指定資源列表,通常寫成 LOCAL_ASSET_FILES+= $(call find-subdir-assets)。 |
LOCAL_CC |
自定義C編譯器來代替缺省的編譯器。 |
LOCAL_CXX |
自定義C++編譯器來代替缺省的編譯器。 |
LOCAL_CFLAGS |
定義額外的C/C++編譯器的參數。 |
LOCAL_CPPFLAGS |
僅定義額外的C++編譯器的參數,不用在C編譯器中。 |
LOCAL_CPP_EXTENSION |
自定義C++源文件的後綴。例如:LOCAL_CPP_EXTENSION := .cc 注意:一旦定義,模塊中所有的源文件都必須使用該後綴,目前不支持混合後綴。 |
LOCAL_C_INCLUDES |
指定頭文件的搜索路徑。 |
LOCAL_FORCE_STATIC_EXECUTABLE |
如果編譯時候需要鏈接的庫有共享和靜態兩者共存的情況。設定此變量值爲true將會優先鏈接靜態庫。通常這種情況只會在編譯root/sbin目錄下的應用纔會用到,因爲他們執行的時間比較早,文件系統的其他部分還沒有加載。 |
LOCAL_GENERATED_SOURCES |
指定由系統自動生成的文件列表。 |
LOCAL_MODULE_TAGS |
定義模塊標籤,Build系統根據標籤決定哪些模塊被安裝。 |
LOCAL_REQUIRED_MODULES |
指定依賴的模塊。一旦本模塊被安裝,通過此變量指定的模塊也將被安裝 |
LOCAL_JAVACFLAGS |
定義額外的javac編譯器的參數 |
LOCAL_JAVA_LIBRARIES |
指定模塊依賴的java共享庫 |
LOCAL_LDFLAGS |
定義鏈接器ld的參數 |
LOCAL_LDLIBS |
指定模塊鏈接時依賴的庫。如果這些庫文件不存在,並不會引發對它們的編譯。這是此變量和LOCAL_SHARED_LIBRARIES的主要區別。 |
LOCAL_NO_MANIFEST |
在一個資源apk中可以指定此變量爲true,表示此apk文件沒有AndroidManifest.xml文件。 |
LOCAL_PACKAGE_NAME |
指定APP應用名稱。 |
LOCAL_PATH |
指定Android.mk文件所在的目錄。 |
LOCAL_POST_PROCESS_COMMAND |
在編譯host相關的模塊時,可以用此變量定義一條命令在link完成後執行。 |
LOCAL_PREBUILT_LIBS |
指定預編譯c/c++動態和靜態庫列表。用於預編譯模塊定義中。 |
LOCAL_PREBUILT_JAVA_LIBRARIES |
指定預編譯java庫列表。用於預編譯模塊定義中。 |
LOCAL_SHARED_LIBRARIES |
指定模塊依賴的c/c++共享庫列表。 |
LOCAL_SRC_FILES |
指定源文件列表。 |
LOCAL_STATIC_LIBRARIES |
指定依賴的c/c++靜態庫列表。 |
LOCAL_MODULE |
除應用(apk)以LOCAL_PACKAGE_NAME指定模塊名以外,其餘的模塊都以LOCAL_MODULE指定模塊名。 |
LOCAL_MODULE_PATH |
指定模塊在目標系統的安裝路徑。 |
LOCAL_UNSTRIPPED_PATH |
指定模塊的unstripped版本在out目錄下的保存路徑。 |
LOCAL_WHOLE_STATIC_LIBRARIES |
這個變量也是定義了模塊依賴的靜態庫列表,和LOCAL_STATIC_LIBRARIES類似。但是通過這個變量定義,鏈接時鏈接器不會將靜態庫中無人調用的代碼去掉。 |
LOCAL_YACCFLAGS |
指定yacc的參數。 |
LOCAL_ADDITIONAL_DEPENDENCIES |
指定本模塊的依賴。用在不方便使用別的方法來指定依賴關係時。 |
LOCAL_BUILT_MODULE |
指定編譯時存放中間文件的目錄。 |
LOCAL_INSTALLED_MODULE |
指定模塊的安裝路徑。 |
LOCAL_MODULE_CLASS |
定義模塊的分類。根據分類,生成的模塊文件會安裝到目標系統相應的目錄下。例如:APPS:安裝到/system/app下;SHARED_LIBRARIES:安裝到/system/lib下;EXECUTABLES:安裝到/system/bin下;ETC:安裝到/system/etc下;但是如果同時用LOCAL_MOULE_PATH定義了路徑,則安裝到該路徑。 |
LOCAL_MODULE_NAME |
指定模塊的名稱。但是目前系統中用到它的實例。 |
LOCAL_MODULE_SUFFIX |
指定當前模塊的後綴。一旦指定,系統在產生目標文件時,會以模塊名加後綴來創建目標文件 |
LOCAL_STRIP_MODULE |
指定模塊是否需要被strip,該模塊是可執行文件或動態庫才能使用該變量。 |
LOCAL_STRIPPABLE_MODULE |
此變量的值通常由Build系統設置,一般可執行文件和動態庫被設爲true。 |
LOCAL_SYSTEM_SHARED_LIBRARIES |
此變量在編譯系統的基本庫,如:libc,libm,libdl時,用來定義這些庫的依賴庫。通常在應用模塊定義中不應使用該變量。 |
LOCAL_PRELINK_MODULE |
編譯.so模塊時,定義是否需要prelink。prelink是通過預鏈接的方式來加快程序啓動速度。如果要設置此值爲true,要先在build/core/prelink-linux-arm.map文件中定義該庫的地址和大小,否則報錯。但是在Android4.2以後的代碼中找不到文件prelink-linux-arm.map了,在build目錄下也搜尋不到這個變量。可能Android已經取消了prelink的功能。 |