Cocos移植到Android-Android.mk編譯文件

我們在上一篇博客中年使用的cocos工具對於C和C++源代碼進行編譯。事實上cocos工具讀取<遊戲工程目錄>proj.androidjni目錄中的Android.mk文件,進行交叉編譯和打包的。
Android.mk是一個編譯文件,它是GNU Makefile的一小部分,是用來向Android NDK描述C和C++源代碼文件的,如何進行編譯,以及打包等操作。默認的Android.mk文件內容如下:

LOCAL_PATH := $(call my-dir)											①


include $(CLEAR_VARS)												②


LOCAL_MODULE := cocos2dcpp_shared										③


LOCAL_MODULE_FILENAME := libcocos2dcpp									④


LOCAL_SRC_FILES := hellocpp/main.cpp 
                   ../../Classes/AppDelegate.cpp 
                   ../../Classes/HelloWorldScene.cpp							⑤


LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes							⑥


LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static							⑦
LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static




include $(BUILD_SHARED_LIBRARY) 										⑧


$(call import-module,2d)													⑨
$(call import-module,audio/android)
$(call import-module,Box2D)

下面我們解釋一下這些項目的含義,第①行LOCAL_PATH是定義當前目錄變量,該變量必須定義,其中my-dir宏,call my-dir是返回當前目錄。第②行代碼include $( CLEAR_VARS)是清除LOCAL開通的變量,但不包含LOCAL_PATH,這是因為所有的變量都是全局的。
第③行代碼定義LOCAL_MODULE變量,該變量是必須定義的,用來識別Android.mk文件中描述的每個模塊。名稱必須是唯一的,而且不包含任何空格。第④行代碼定義LOCAL_MODULE_FILENAME變量,它是可以選的,通過該變量可以重新定義生成文件的名字。本例中生成的文件名libcocos2dcpp.so文件。
第⑤行代碼定義LOCAL_SRC_FILES變量,它描述瞭模塊中將要編譯的源文件列表。第⑥行代碼定義LOCAL_C_INCLUDES變量,指定頭文件搜索路徑邏輯列表。第⑦行代碼定義LOCAL_WHOLE_STATIC_LIBRARIES變量,它用來指定要連接的庫模塊。
第⑧行代碼是include $(BUILD_SHARED_LIBRARY)表示編譯生成動態鏈接庫(或共享庫),文件命名為lib<庫模塊名>.so。另外,我們可以使用BUILD_STATIC_LIBRARY告知編譯系統生成靜態鏈接庫,文件命令為lib<庫模塊名>.a。
第⑨行代碼$(call import-module,2d)是通過目錄名包含另一個模塊的Android.mk,其中2d是模塊目錄名。

提示 庫是一些沒有main函數的程序代碼的集合。庫分為:靜態鏈接庫和動態鏈接庫,它們的區別是:靜態鏈接庫可以編譯到你的執行代碼中,應用程序可以在沒有靜態鏈接庫的環境下運行;動態鏈接庫不能編譯到你的執行代碼中,應用程序必須在有鏈接庫文件的環境下運行。在微軟的Windows和Windows Phone平臺動態鏈接庫文件是.dll文件,靜態鏈接庫是.lib文件;在Linux和Android平臺動態鏈接庫文件是.so文件,靜態鏈接庫是.a文件;Mac OS X和iOS等平臺動態鏈接庫文件是.dylib文件,靜態鏈接庫是.a文件。

  

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。