---------- cut here ------------------ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello-jni LOCAL_SRC_FILES := hello-jni.c include $(BUILD_SHARED_LIBRARY) ---------- cut here ------------------
現在,讓我們解釋一下這幾行: LOCAL_PATH := $(call my-dir) 一個Android.mk文件的開頭必須LOCAL_PATH變量的定義。它是用來在開發樹中查找源文件。在這個例子中,宏功能“my-dir”,提供構建系統,用於返回在當前目錄(即該目包含的路徑Android.mk文件本身)。 $(CLEAR_VARS) 通過構建系統和點到CLEAR_VARS變量特殊的GNU Makefile文件,這個文件中將清除許多LOCAL_XXX的變量爲你(例如LOCAL_MODULE ,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES,等等。),與除LOCAL_PATH。這是必要的,因爲所有的建設控制文件都在一個單一的GNU Make的執行上下文分析所有的變量。 LOCAL_MODULE:= HELLO-JNI LOCAL_MODULE變量必須被定義來確定每個模塊,你描述在你的Android.mk。該名稱必須是*獨特的和不包含任何空格。需要注意的是,構建系統會自動添加適當的相應的生成的文件的前綴和後綴。換言之,一個命名爲'foo'的共享庫模塊將產生'libfoo.so“。 重要注意事項: 如果你的名字你的模塊libfoo的,構建系統不會添加另一種的'lib'前綴,並會生成libfoo.so。這是爲了支持Android.mk文件,源於Android平臺。 LOCAL_SRC_FILES:= HELLO-jni.c LOCAL_SRC_FILES變量必須包含C和/或C + +源文件的列表文件將被建造和組裝到模塊中。需要注意的是,你應該沒有列出頭文件和包含的文件,因爲生成系統將 自動爲你建立鏈接,只列出源文件將被直接傳遞給編譯器即可。 需要注意的是C + +源文件的默認擴展名是“.CPP。這是 然而,可以通過定義變量指定一個不同的LOCAL_CPP_EXTENSION。不要忘了最初的“.”(即“.CXX”,而不是“CXX”)。 $(BUILD_SHARED_LIBRARY) BUILD_SHARED_LIBRARY是由編譯系統提供的一個變量,即一個GNU Makefile腳本,負責收集所有的中定義的LOCAL_XXX變量,因爲最新的信息“include $(CLEAR_VARS)”,並決定建立什麼,以及如何做到這一點。還有BUILD_STATIC_LIBRARY生成靜態庫。也就是說:
include $(BUILD_SHARED_LIBRARY)與include $(BUILD_STATIC_LIBRARY)將決定當前的庫以共享方式還是靜態的方式來創建
在一個Android.mk中可定義多個庫,結構如下:
include $(CLEAR_VARS) LOCAL_MODULE := native LOCAL_SRC_FILES := native.c include $(BUILD_SHARED_LIBRARY)
除此(LOCAL_MODULE)之外, 在開發中還可以通過include方式來引入其它的mk文件來進行模塊化