ndk開發中的Android.mk檔案與Application.mk詳解及例項
阿新 • • 發佈:2019-02-08
Android.mk檔案的作用:
An
Android.mk
file is written to describe your sources to the build system.
中文意思是:寫一個Android.mk檔案是為了向生成系統描述你的原始碼。
Application.mk檔案的作用:
The purpose of Application.mk is to describe which native 'modules' (i.e. static/shared libraries) are needed by your application.An Application.mk file is usually placed under $PROJECT/jni/Application.mk, where $PROJECT points to your application's project directory.
中文意思是:Application.mk用來描述你的工程下的native模組, 一般放在$PROJECT/jni/Application.mk, 其中$PROJECT表示你的工程目錄,這樣就可以被ndk-build指令碼檔案找到.(注:在這種方式下,進入jni目錄,即$PROJECT/jni/,然後執行ndk-build,就可以直接編譯jni生成.so檔案了).
上面就簡單的描述了Android.mk和Application.mk的檔案的作用,下面拿Cocos2d-x中最簡單的例子來簡單介紹一下這兩個檔案。
筆者在cocos2d-x-2.2.3\projects下建立了一個Test專案,匯入proj.android到Eclipse中,會發現有如下的檔案目錄結構:
、
在jni資料夾下有這兩個檔案,我們開啟可以看到以下程式碼,筆者加上對應的註釋了:
/Test/jni/Android.mk
- #1.這個變數用於給出當前檔案的路徑,my-dir返回當前Android.mk所在目錄的路徑
- LOCAL_PATH := $(call my-dir)
- #2.CLEAR_VARS:指向一個編譯指令碼。這個必須在開始一個新模組之前包含
- include $(CLEAR_VARS)
- #3.這個模組的名字,它必須是唯一的,而且不能包含空格
- LOCAL_MODULE := cocos2dcpp_shared
-
#4.設定你的模組的二進位制檔案的名稱,獨立於LOCAL_MODULE
- LOCAL_MODULE_FILENAME := libcocos2dcpp
- #5.這是要編譯的原始碼檔案列表
- LOCAL_SRC_FILES := hellocpp/main.cpp \
- ../../Classes/AppDelegate.cpp \
- ../../Classes/HelloWorldScene.cpp
- #6.可選變數,表示標頭檔案的搜尋路徑
- LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
- #7.LOCAL_WHOLE_STATIC_LIBRARIES會載入整個靜態庫,LOCAL_STATIC_LIBRARIES只是載入靜態庫中用到的函式。
- LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
- LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
- LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
- LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static
- LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
- #8.BUILD_SHARED_LIBRARY:指向編譯指令碼,根據所有的在 LOCAL_XXX 變數把列出的原始碼檔案編譯成一個共享庫。
- include $(BUILD_SHARED_LIBRARY)
- #9.將一個新的路徑加入NDK_MODULE_PATH變數。
- $(call import-add-path,$(LOCAL_PATH)/platform/third_party/android/prebuilt)
- #10.在Android.mk中引用模組
- $(call import-module,CocosDenshion/android)
- $(call import-module,extensions)
- $(call import-module,external/Box2D)
- $(call import-module,external/chipmunk)
以上程式碼筆者已經進行了具體的解釋,每一行程式碼代表的作用可以從中得到。更多具體的語法,請讀者參考ndk提供的文件。
/Test/jni/Application.mk
- #1.指定application裡要連結的標準c++庫
- APP_STL := gnustl_static
- #2.編譯選項
- APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1