Android.mk在android的系統開發中毫無疑問是很重要的,它的作用比較強大,可以將c/c++代碼編譯成可執行程序,動態庫,靜態庫,當然也可以將Java代碼編譯成二進制代碼,jar包,apk等等,一下就列舉幾個例子來說明是如何使用的:
1,編寫方法: 抄模板,個人不建議默寫,android源碼中的模板遍地都是,所以不用擔心不會寫
2,Android.mk的寫法實際是基于Makefile的,所以基本的規則還是不能有悖于Makfile,Makefile的一個規則是:
目標 :依賴
編譯規則 #注意規則前面有一個tab
3,簡單的模板:hardware/ril/rild/Android.mk
#獲取Androd.mk所在路徑
LOCAL_PATH:= $(call my-dir)
#清空以LOCAL_xxx的變量, 除了LOCAL_PATH
include $(CLEAR_VARS)
#指定源文件
LOCAL_SRC_FILES:= \
rild.c
#指定目標文件
LOCAL_MODULE:= rild
#編譯規則
include $(BUILD_EXECUTABLE)
-------------------------------------------------------------------
c/c++代碼編譯成elf可執行程序:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
hello.c
# optional表示在任何模式下都會編譯
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE:= hello_elf
include $(BUILD_EXECUTABLE)
-----------------------------------------------------------------
編譯成動態庫
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES:= myled_jni.cpp
LOCAL_SHARED_LIBRARIES := \
libutils
LOCAL_MODULE:=libled_jni
include $(BUILD_SHARED_LIBRARY)
-----------------------------------------------------------------------------------------------------------------------------------
預編譯: 表示拷貝
prebuilt/android-arm/gdbserver$ vim Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := ADV7123.pdf
LOCAL_MODULE := ADV7123.pdf
#指定目標文件安裝路徑
LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_TAGS := optional
#預編譯方式
include $(BUILD_PREBUILT)