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++部分一起重新編譯,很慢哦
參考: