Android編譯系統的makefile Android . MK是這樣寫的
(1)Android . MK文件需要指定LOCAL_PATH變量來查找源文件。因為壹般來說,
Android.mk和要編譯的源文件在同壹個目錄下,因此定義如下:
LOCAL_PATH:=$(調用my-dir)
上面的語句意味著LOCAL_PATH變量被定義為成本文件所在的目錄路徑。
(2)Android . MK可以定義多個編譯模塊,每個編譯模塊都以include $(CLEAR _ VARS)開頭。
以include $(BUILD _ XXX)結尾。
包括美元(VARS結算)
編譯系統提供了CLEAR_VARS,它指定GNU MAKEFILE將為您清除除LOCAL_PATH以外的所有LOCAL_XXX變量。
如LOCAL_MODULE、LOCAL_SRC_FILES、LOCAL_SHARED_LIBRARIES、LOCAL_STATIC_LIBRARIES等。
include $(BUILD _ STATIC _ LIBRARY)的意思是編譯成靜態庫。
include $(BUILD _ SHARED _ LIBRARY)的意思是編譯成動態庫。
include $(BUILD _ EXECUTABLE)表示編譯成可執行程序。
(3)示例如下(FrameWorks/base/libs/audioflinger/Android . MK):
LOCAL_PATH:= $(調用my-dir)
包括$(VARS結算)模塊1
ifeq($(AUDIO _ POLICY _ TEST),true)
啟用_音頻_轉儲:= true
endif
LOCAL_SRC_FILES:= \
audio hardware general . CPP \
AudioHardwareStub.cpp \
音頻硬件接口。cpp
ifeq($(ENABLE _ AUDIO _ DUMP),true)
LOCAL _ SRC _ FILES+= audiodump interface . CPP
LOCAL _ CFLAGS+=-den able _ AUDIO _ DUMP
endif
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libmedia
libhardware_legacy
ifeq($(strip $(BOARD _ USES _ GENERIC _ AUDIO),true)
LOCAL _ CFLAGS+=-DG generic _ AUDIO
endif
LOCAL _ MODULE:= lib audio interface
ifeq($(BOARD _ HAVE _ BLUETOOTH),true)
LOCAL _ SRC _ FILES+= a2dp audio interface . CPP
LOCAL _ SHARED _ LIBRARIES+= liba2dp
LOCAL _ CFLAGS+=-DWITH _ BLUETOOTH-DWITH _ A2DP
LOCAL_C_INCLUDES += $(調用include-path-for,bluez)
endif
include $(BUILD _ STATIC _ LIBRARY)模塊被編譯成壹個靜態庫。
包括$(VARS結算)模塊2
LOCAL_SRC_FILES:= \
AudioPolicyManagerBase.cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libmedia
ifeq($(目標模擬器),true)
LOCAL_LDLIBS += -ldl
其他
本地共享庫+= libdl
endif
LOCAL _ MODULE:= libaudiopolicybase
ifeq($(BOARD _ HAVE _ BLUETOOTH),true)
LOCAL_CFLAGS += -DWITH_A2DP
endif
ifeq($(AUDIO _ POLICY _ TEST),true)
LOCAL _ CFLAGS+=-d audio _ POLICY _ TEST
endif
include $(BUILD _ STATIC _ LIBRARY)模塊2被編譯為靜態庫。
包括$(VARS結算)模塊3
LOCAL_SRC_FILES:= \
AudioFlinger.cpp \
AudioMixer.cpp.arm \
AudioResampler.cpp.arm \
AudioResamplerSinc.cpp.arm \
audioressamplercubic . CPP . arm \
音頻政策服務。cpp
LOCAL_SHARED_LIBRARIES := \
libcutils \
libutils \
libbinder \
libmedia
libhardware_legacy
ifeq($(strip $(BOARD _ USES _ GENERIC _ AUDIO),true)
LOCAL _ STATIC _ LIBRARIES+= libaudio interface libaudiopolicybase
LOCAL _ CFLAGS+=-DG generic _ AUDIO
其他
LOCAL _ SHARED _ LIBRARIES+= libaudio libaudiopolicy
endif
ifeq($(目標模擬器),true)
LOCAL_LDLIBS += -ldl
其他
本地共享庫+= libdl
endif
LOCAL_MODULE:= libaudioflinger
ifeq($(BOARD _ HAVE _ BLUETOOTH),true)
LOCAL _ CFLAGS+=-DWITH _ BLUETOOTH-DWITH _ A2DP
LOCAL _ SHARED _ LIBRARIES+= liba2dp
endif
ifeq($(AUDIO _ POLICY _ TEST),true)
LOCAL _ CFLAGS+=-d audio _ POLICY _ TEST
endif
ifeq($(目標模擬器),true)
ifeq($(主機操作系統),linux)
LOCAL_LDLIBS += -lrt -lpthread
endif
endif
ifeq($(BOARD _ USE _ LVMX),true)
LOCAL_CFLAGS += -DLVMX
LOCAL_C_INCLUDES +=供應商/恩智浦
LOCAL _ STATIC _ LIBRARIES+= liblifevibes
本地共享庫+= liblvmxservice
# LOCAL _ SHARED _ LIBRARIES+= liblvmxipc
endif
include $(BUILD _ SHARED _ LIBRARY)模塊3被編譯為動態庫。
(4)編寫應用程序(APK)
LOCAL_PATH := $(調用my-dir)
包括美元(VARS結算)
#在java子目錄中構建所有java文件-& gt;直譯(在java子目錄中創建的所有Java文件)
LOCAL_SRC_FILES := $(調用all-subdir-java-files)
#要構建的APK的名稱-& gt;直譯(創造APK的名字)
本地包名稱:=本地包
#告訴它建造壹個APK-& gt;直譯(告訴它建造壹個APK)
包括$(BUILD _ PACKAGE)
(5)編譯依賴於靜態Java庫(static.jar)的應用程序
LOCAL_PATH := $(調用my-dir)
包括美元(VARS結算)
#要包含在包中的靜態庫列表
本地靜態JAVA庫:=靜態庫
#在java子目錄中構建所有java文件
LOCAL_SRC_FILES := $(調用all-subdir-java-files)
#要構建的APK的名稱
本地包名稱:=本地包
#告訴它建造壹個APK
包括$(BUILD _ PACKAGE)
(6)編寫壹個需要平臺密鑰簽名的應用程序。
LOCAL_PATH := $(調用my-dir)
包括美元(VARS結算)
#在java子目錄中構建所有java文件
LOCAL_SRC_FILES := $(調用all-subdir-java-files)
#要構建的APK的名稱
本地包名稱:=本地包
本地證書:=平臺
#告訴它建造壹個APK
包括$(BUILD _ PACKAGE)
(7)編譯需要以特定鍵為前導的應用程序。
LOCAL_PATH := $(調用my-dir)
包括美元(VARS結算)
#在java子目錄中構建所有java文件
LOCAL_SRC_FILES := $(調用all-subdir-java-files)
#要構建的APK的名稱
本地包名稱:=本地包
LOCAL_CERTIFICATE :=供應商/示例/證書/應用程序
#告訴它建造壹個APK
包括$(BUILD _ PACKAGE)
8 .添加預編譯的應用程序。
LOCAL_PATH := $(調用my-dir)
包括美元(VARS結算)
#模塊名稱應該與要安裝的apk名稱匹配。
LOCAL_MODULE := LocalModuleName
LOCAL _ SRC _ FILES:= $(LOCAL _ MODULE)。apk
LOCAL_MODULE_CLASS := APPS
LOCAL _ MODULE _ SUFFIX:= $(COMMON _ ANDROID _ PACKAGE _ SUFFIX)
包括$(BUILD _ prebuild)
(9)添加壹個靜態JAVA庫
LOCAL_PATH := $(調用my-dir)
包括美元(VARS結算)
#在java子目錄中構建所有java文件
LOCAL_SRC_FILES := $(調用all-subdir-java-files)
#此庫依賴的任何庫
LOCAL _ JAVA _ LIBRARIES:= Android . test . runner
#要創建的jar文件的名稱
本地模塊:=樣本
#構建壹個靜態jar文件。
包含$(BUILD _ STATIC _ JAVA _ LIBRARY)
(10)Android . MK的編譯模塊可以定義相關的編譯內容,即指定如下相關變量:
當地AAPT旗幟
LOCAL _ ACP _不可用
本地_附加_ JAVA _目錄
AIDL當地包括
本地_允許_未定義_符號
本地ARM模式
LOCAL_ASFLAGS
本地資產目錄
LOCAL_ASSET_FILES該變量在編譯Android.mk文件中的應用程序(BUILD_PACKAGE)時設置,表示資源文件。
它通常被定義為local _ asset _ files+= $(調用find-subdir-assets)。
本地構建模塊主幹
LOCAL _ C _ INCLUDES額外的C/C++編譯頭文件路徑,LOCAL_PATH表示該文件所在的目錄。
例子如下:
LOCAL _ C _ INCLUDES+= extlibs/zlib-1 . 2 . 3
LOCAL _ C _ INCLUDES+= $(LOCAL _ PATH)/src
LOCAL_CC指定c編譯器。
本地證書簽名認證
LOCAL_CFLAGS為C/C++編譯器定義了附加標誌(如宏定義),例如:local _ cflags+=-DLIB實用程序_本機= 1。
LOCAL_CLASSPATH
本地_壓縮_模塊_符號
必須同時為安裝應用程序時需要復制的頭文件定義LOCAL_COPY_HEADERS_TO。
安裝應用程序時復制頭文件的目標路徑。
LOCAL_cpp_EXTENSION如果您的C++文件不使用cpp作為文件後綴,則可以通過LOCAL_CPP_EXTENSION指定C++文件的後綴。
例如:LOCAL_CPP_EXTENSION :=。復寫的副本
註意,統壹模塊中C++文件的後綴必須壹致。
LOCAL_CPPFLAGS將額外的標誌傳遞給C++編譯器,例如:LOCAL _ CPP flags+=-ff riend-injection。
LOCAL_CXX指定C++編譯器。
本地_ DX _標誌
本地導出包資源
LOCAL_FORCE_STATIC_EXECUTABLE如果編譯後的可執行程序要進行靜態鏈接(執行時不依賴於任何動態庫),請設置LOCAL _ FORCE _ STATIC _ EXECUTABLE:= true。
目前只有libc具有靜態庫的形式,它僅由文件系統中/sbin目錄下的應用程序使用。該目錄中的應用程序通常
文件系統的其余部分尚未加載,因此它必須是靜態鏈接的。
本地生成的來源
本地工具用於
包名的本地工具
本地_中間_來源
本地_中間_目標
本地主機模塊
本地JAR清單
LOCAL_JARJAR_RULES
LOCAL_java_LIBRARIES指定編譯JAVA應用程序和庫時要包含的JAVA類庫。目前有核心和框架兩種類型。
在大多數情況下,它被定義為:local _ Java _ libraries:= core framework。
請註意,LOCAL_JAVA_LIBRARIES不是必需的,在編譯APK時不允許定義它(它將自動添加)。
本地JAVA資源DIRS
本地JAVA資源文件
本地_ JNI _共享_圖書館
LOCAL_LDFLAGS將額外的參數傳遞給連接器(壹定要註意參數的順序)。
LOCAL_LDLIBS指定用於編譯可執行程序或庫的附加庫,並以“-lxxx”格式指定庫,例如:
LOCAL _ LDLIBS+=-lcurses-LP thread
LOCAL_LDLIBS += -Wl,-z,origin
LOCAL_MODULE生成的模塊的名稱(註意應用程序名稱是LOCAL_PACKAGE_NAME而不是LOCAL_MODULE)。
LOCAL_MODULE_PATH生成模塊的路徑。
本地模塊詞幹
本地模塊標簽生成模塊的標記。
本地_無_默認_編譯器_標誌
本地_非_艾瑪_編譯
本地_無_艾瑪_儀器
本地標準圖書館
本地覆蓋包
本地包名APK應用程序的名稱。
本地後處理命令
預編譯包括$(BUILD _ prebuild)或$(BUILD _ HOST _ prebuild)時使用LOCAL _ PREBUILT _ EXECUTABLES,並指定要復制的可執行文件。
本地_預構建_ JAVA _庫
預編譯包括$(BUILD _ prebuild)或$(BUILD _ HOST _ prebuild)時,使用LOCAL _ prebuild _ LIBS來指定要復制的庫。
本地預建OBJ文件
本地預構建靜態JAVA庫
LOCAL_PRELINK_MODULE需要預連接處理嗎(默認情況下是必需的,用於動態庫優化)?
LOCAL_REQUIRED_MODULES指定該模塊所依賴的模塊(該模塊所依賴的模塊將在安裝該模塊時同步安裝)。
本地資源目錄
本地SDK版本
LOCAL_SHARED_LIBRARIES可以鏈接動態庫。
LOCAL_SRC_FILES編譯源文件。
本地靜態JAVA庫
LOCAL_STATIC_LIBRARIES可以鏈接靜態庫。
LOCAL_UNINSTALLABLE_MODULE
本地未條帶化路徑
LOCAL_WHOLE_STATIC_LIBRARIES指定了模塊需要加載的完整靜態庫(這些精通的庫不允許鏈接器在鏈接時刪除無用的代碼)。
LOCAL_YACCFLAGS
覆蓋_構建_模塊_路徑