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