Android中JNI開發(二)Android.mk寫法

Android.mk文件的寫法:
 ---------- 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變量必須被定義來確定每個模塊,你描述在你的Andr​​oid.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文件來進行模塊化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章