LOCAL_PATH:
這個變量用於給出當前文件的路徑。必須在 Android.mk
的開頭定義,可以這樣使用:LOCAL_PATH := $(call my-dir)
如當前目錄下有個文件夾名稱 src
,則可以這樣寫 $(call src)
,那麼就會得到 src
目錄的完整路徑這個變量不會被$(CLEAR_VARS)
清除,因此每個 Android.mk
只需要定義一次(即使在一個文件中定義了幾個模塊的情況下)。
LOCAL_MODULE:
這是模塊的名字,它必須是唯一的,而且不能包含空格。必須在包含任一的$(BUILD_XXXX)
腳本之前定義它。模塊的名字決定了生成文件的名字。
LOCAL_SRC_FILES:
這是要編譯的源代碼文件列表。只要列出要傳遞給編譯器的文件,因爲編譯系統自動計算依賴。注意源代碼文件名稱都是相對於 LOCAL_PATH
的,你可以使用路徑部分,例如:LOCAL_SRC_FILES := foo.c toto/bar.c\Hello.c
文件之間可以用空格或Tab鍵進行分割,換行請用""如果是追加源代碼文件的話,請用LOCAL_SRC_FILES +=
注意:可以LOCAL_SRC_FILES := $(call all-subdir-java-files)
這種形式來包含local_path
目錄下的所有java文件。
LOCAL_C_INCLUDES:
可選變量,表示頭文件的搜索路徑。默認的頭文件的搜索路徑是LOCAL_PATH
目錄。
LOCAL_STATIC_LIBRARIES:
表示該模塊需要使用哪些靜態庫,以便在編譯時進行鏈接。
LOCAL_SHARED_LIBRARIES:
表示模塊在運行時要依賴的共享庫(動態庫),在鏈接時就需要,以便在生成文件時嵌入其相應的信息。注意:它不會附加列出的模塊到編譯圖,也就是仍然需要在Application.mk
中把它們添加到程序要求的模塊中。
LOCAL_LDLIBS:
編譯模塊時要使用的附加的鏈接器選項。這對於使用‘-l’前綴傳遞指定庫的名字是有用的。例如,LOCAL_LDLIBS := -lz
表示告訴鏈接器生成的模塊要在加載時刻鏈接到/system/lib/libz.so
。可查看 docs/STABLE-APIS.TXT 獲取使用 NDK發行版能鏈接到的開放的系統庫列表。
LOCAL_MODULE_PATH 和 LOCAL_UNSTRIPPED_PATH
在 Android.mk
文件中, 還可以用LOCAL_MODULE_PATH
和LOCAL_UNSTRIPPED_PATH
指定最後的目標安裝路徑.
不同的文件系統路徑用以下的宏進行選擇:
TARGET_ROOT_OUT:表示根文件系統。
TARGET_OUT:表示 system文件系統。
TARGET_OUT_DATA:表示 data文件系統。
用法如:LOCAL_MODULE_PATH :=$(TARGET_ROOT_OUT)
至於LOCAL_MODULE_PATH
和LOCAL_UNSTRIPPED_PATH
的區別,暫時還不清楚。
LOCAL_JNI_SHARED_LIBRARIES:
定義了要包含的so庫文件的名字,如果程序沒有采用jni,不需要LOCAL_JNI_SHARED_LIBRARIES := libxxx
這樣在編譯的時候,NDK自動會把這個libxxx打包進apk; 放在youapk/lib/
目錄下