標籤:des android style class blog code
Cocos2d-x移植到Android平台編譯的兩個檔案Android.mk和Application.mk
2014年6月11日
本篇部落客要講NDK編譯Android項目的兩個檔案Android.mk和Application.mk,筆者在使用NDK編譯Cocos2d-x產生的Android項目的時候遇到配置編譯環境的問題,網上雖然有些配置教程,但並未把一些原理性的東西描述清楚,雖然有時候可以把編譯環境配置成功了,但並不瞭解為什麼要這麼來配,有時候出現問題也無從下手去查。筆者是帶著疑問去配置NDK的編譯環境的,其中就遇到Android.mk和Application.mk這兩個檔案,筆者並不知道這兩個檔案是用來幹嘛的,開啟來看之後也有一堆自己不認識的文法,所以才想著寫這篇部落格來整理總結一下。
下面進入正題:
筆者下載的NDK版本是:android-ndk-r9d
這兩個檔案相關的文檔在android-ndk-r9d/docs路徑下,原汁原味,你值得擁有。
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,建立一個Cocos2d-x項目這裡請參考前面筆者發表的部落格:http://blog.csdn.net/wwj_748/article/details/23677829
筆者在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_MODULELOCAL_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_staticLOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_staticLOCAL_WHOLE_STATIC_LIBRARIES += box2d_staticLOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_staticLOCAL_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
以上就是本篇部落格的內容,下篇部落格將給大家分享一下如何不用Cygwin來配置NDK編譯環境,而直接在Eclipse配置NDK編譯環境。