cocos2d-x for android配置 & 執行 Sample on Linux OS

夢書發表於2013-11-21

1.從http://www.cocos2d-x.org/download下載穩定版 比如cocos2d-x-2.2

2.解壓cocos2d-x-2.2.zip,比如本文將其解壓到 /opt 目錄下

3.執行 android-buildsetup.sh,執行之前需要先設定3個環境變數,如將以下變數寫到檔案 /etc/profile中

export ANDROID_SDK_ROOT=/opt/android-sdk-linux
export ANDROID_NDK_ROOT=/opt/android-ndk-r9b
export COCOS2DX_ROOT=/opt/cocos2d-x-2.2
export PATH=$COCOS2DX_ROOT:$ANDROID_NDK_ROOT:$ANDROID_SDK_ROOT:$PATH

然後:

$ cd /opt/cocos2d-x-2.2/tools
$ ./android-buildsetup.sh

2.2.3版本需要採用如下的方式執行:(如果按照上面的執行話,指令碼還給出了提示,贊,這個比較人性化)

$ cd ./tools/android-buildsetup.sh
lbq:/opt/cocos2d-x-2.2.3.$ ./tools/android-buildsetup.sh

即改成需要在根目錄下執行

android-buildsetup.sh的主要目的是將android sdk與ndk的目錄路徑寫到各個sample工程的local.properties檔案中.

成功執行,如下圖所示:

4.接著編譯JNI,與普通的Andorid工程不同的是,不是進入android工程中的JNI目錄,然後執行ndk-build,如果這樣執行,會出現如下的錯誤:

$ cd /opt/cocos2d-x-2.2/samples/Cpp/HelloCpp/proj.android/jni
$ ndk-build
Android NDK: /opt/cocos2d-x-2.2/samples/Cpp/HelloCpp/proj.android/jni/Android.mk: Cannot find module with tag 'cocos2dx' in import path    
Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?    
Android NDK: The following directories were searched:    
Android NDK:         
/opt/cocos2d-x-2.2/samples/Cpp/HelloCpp/proj.android/jni/Android.mk:19: *** Android NDK: Aborting.    .  Stop.

而應該是:

$ cd /opt/cocos2d-x-2.2/samples/Cpp/HelloCpp/proj.android
$ ./build_native.sh

如果正確的話,就會產生.so檔案

5.但是如果您的NDK版本不是最新或者不購新的話(至少是r6以上,不包括r6版本),則會出現如下的錯誤:

/opt/cocos2d-x-2.2/cocos2dx/platform/android/CCGL.h:47: error: 'PFNGLGENVERTEXARRAYSOESPROC' does not name a type
/opt/cocos2d-x-2.2/cocos2dx/platform/android/CCGL.h:48: error: 'PFNGLBINDVERTEXARRAYOESPROC' does not name a type
/opt/cocos2d-x-2.2/cocos2dx/platform/android/CCGL.h:49: error: 'PFNGLDELETEVERTEXARRAYSOESPROC' does not name a type

網上也能查到很多這樣的錯誤,也都是說NDK版本低的原因。

剛開始我更新了NDK版本並且重新執行了步驟3,但是還會出現以上的錯誤,

後來發現,是因為build_native.sh這個Shell指令碼寫的有問題:

# write local.properties if it doesn't already exist
    if [ -f "$_LOCAL_PROPERTIES_FILE" ]
    then
        echo "$_LOCAL_PROPERTIES_FILE exists. skipping overwrite"
    else
        echo "writing $_LOCAL_PROPERTIES_FILE"
        echo -e "$_CONTENTS" > "$_LOCAL_PROPERTIES_FILE"
    fi

看到了沒,寫local.properties當且僅當local.properties檔案不存在的時候,所以只要一開始執行過一次android-buildsetup.sh,那麼那些android工程下local.properties就不會被更新,所以需要修改下android-buildsetup.sh這個指令碼,每次執行都強制寫local.properties檔案:

# write local.properties wether if is exist
#    if [ -f "$_LOCAL_PROPERTIES_FILE" ]
#    then
#        echo "$_LOCAL_PROPERTIES_FILE exists. skipping overwrite"
#    else
        echo "writing $_LOCAL_PROPERTIES_FILE"
        echo -e "$_CONTENTS" > "$_LOCAL_PROPERTIES_FILE"
#    fi

這樣,就徹底搞定了。

6./opt/cocos2d-x-2.2/cocos2dx/platform/android這個是cocos2dx引擎的程式碼,很多sample工程都要引用這個lib

7.HelloCpp的“夢書”(原來是"Hello World"修改了下)二字來自 /opt/cocos2d-x-2.2/samples/Cpp/HelloCpp/Classes 下的HelloWorldScene.cpp檔案

CCLabelTTF* pLabel = CCLabelTTF::create("夢書", "Arial", TITLE_FONT_SIZE);

程式碼很像Object C不是。--- 不過目前每次clean都會連cocos2d-x的引擎程式碼C++部分一起重新編譯,很慢哦

 

參考:

1. https://github.com/cocos2d/cocos2d-x

2.How to setup Cocos2d-x (Windows and Android)

相關文章