cocos2d-x升級到3.0後變化不小,除了API的變化(主要是函數和類名稱變化,以及使用了C++11的很多特性。function/bind, lamda, std::thread…),建立和編譯project也作了一些簡化調整。本文主要討論一下cocos2d-x3.0 在android平臺開發的環境設置及project建立編譯流程。css
除了2.x所需要的python,jdk, android sdk和ndk以外,還需要部署apache-ant。html
1) 在path中設置好java環境變量:java
JAVA_HOME=C:\jdk_xx.xx.xxpython
path加上%JAVA_HOME%\bin;android
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jarc++
2) 安裝python 2.x版本號。git
3) 部署好android sdk, ndk, ant以後,運行...\cocos2d-x-3.0\ setup.py。github
提示輸入ndk。sdk和ant文件夾。這裏要注意,androidsdk設置爲 …\adt-bundle-windows-x86\sdk,ndk文件夾設置爲…\android-ndk,而ant文件夾要設置爲…\apache-ant\bin,和前二者設置爲根文件夾不一樣,要設置到bin文件夾。不然不生效。部署apk的時候會提示找不到ant。apache
4) 三個文件夾設置完畢後本身主動關閉setup.py腳本。開發環境設置完畢。windows
2.x
cocos2d-x\tools\project-creator文件夾下,命令行運行python create_project.py –project ABC –package com.xyz.abc –language cpp建立project
建立好的project文件夾在cocos2d-x\projects,不能拷貝到其它路徑,不然會有project依賴問題。
3.0
cmd命令行進入本身選擇的project路徑,運行cocos new MyGame -p com.your_company.mygame -l cpp
等待project建立完畢。
3.0版本號會把依賴的cocos2dx源文件拷貝到本身建立的project文件夾,在cocos2d文件夾下。因此不存在拷貝project引發的依賴問題。
建立完畢後,cd進入project文件夾。運行cocos compile –p android –j 4編譯project,cocos run –p android –j 4編譯+部署apk+運行。
-p參數指定平臺
-j參數指定使用多少個線程運行編譯,官方的說法是可以加快編譯速度。(可選項)
默認是debug編譯,-m release可以指定編譯爲公佈版。注意。release必須小寫。寫成Release無效。
不少其它參數參見官方文檔:
https://github.com/cocos2d/cocos2d-console/issues/27
cocos deploy –p android部署編譯好的apk。cocos run –p android可以編譯好直接部署。
官方文檔的cocos clean命令運行後提示Error:argument 'clean' not found。
看一下cocos2dx的命令腳本,文件夾在cocos2d-x-3.0\tools\cocos2d-console。
查看bin文件夾下的cocos2d.ini:
#
#cocos2d command line tool configuration file
#
[plugins]
project_new.CCPluginNew
project_compile.CCPluginCompile
project_run.CCPluginRun
project_deploy.CCPluginDeploy
plugin_jscompile.CCPluginJSCompile
#plugin_version.CCPluginVersion
#plugin_install.CCPluginInstall
#plugin_update.CCPluginUpdate
#plugin_clean.CCPluginClean
#plugin_dist.CCPluginDist
# To adda new plugin add it's classname here
可以看到clean命令被凝視掉了,僅僅有new,compile, run, deploy可用,緣由不明,那就不用命令清理project了,改用手動清理吧。很是easy,需要清理時把porj.android文件夾bin, obj, libs, assets, gen文件夾都刪除就行了。可以寫個腳本完畢。
cocos2d-x2.x版本號建立的project可以直接使用vs2010編譯。
在windows上開發調試好後移植到android平臺就可以了。升級到3.0版本號後,由於使用了c++11,最低支持版本號爲vs2012。
vs2012要求win7以上os,無法在xp系統上調試程序了。
既然如此,就不win32project進行開發了,直接編譯android平臺。也省去了移植這一過程。
命令行編譯部署androidproject前面都介紹過了,如下需要的就是選擇一個IDE方便開發。這裏推薦codeblocks。建立project過程例如如下:
1) 在遊戲project根文件夾建立一個codeblocks空project。
2) 加入Classes和cocos2d文件夾所有文件。
3) 預編譯宏定義加入ANDROID 指定平臺。
設置完畢。就可以進行開發了。需要編譯時命令行運行cocos compile –p android –j 4就可以了。
依據命令行提示的錯誤代碼行在codeblockside中查找相應源文件的相應行來定位bug。
加入新文件時可不要僅僅在codeblocks里加入。還要在proj.android/jni/Android.mk中加入LOCAL_SRC_FILES。
另外,假設需要使用cocos2dx的extensions模塊,也需要改動Android.mk文件。
改動例如如下:
LOCAL_C_INCLUDES:= $(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../cocos2d\extensions
LOCAL_WHOLE_STATIC_LIBRARIES+= cocos_extension_static
$(call import-module,extensions)
加入其它模塊與之類似。
cocos2d-x3.0使用新的打印函數log(2.x版本號是CCLog),咱們需要使用adb和logcat工具查看log輸出(要在命令行裏使用adb,記得配置adt-bundle-windows-x86\sdk\platform-tools到path)。
命令行運行adb logcat。假設android設備鏈接USB或者開着模擬器。就可以看到輸出的log信息了,但信息太多。程序裏打印的重要信息很是快會被淹沒。必須設置過濾條件。
可以看到cocos2d-x的log信息格式爲 D/cocos2d-xdebug info(12358): xxxx。
D表示debug。表示打印優先級。優先級是如下的字符,順序是從低到高:
V — 明細 (最低優先級)
D — 調試
I — 信息
W — 警告
E — 錯誤
F — 嚴重錯誤
S — 無記載 (最高優先級,沒有什麼會被記載)
logcat的使用詳見http://blog.csdn.net/xyz_lmn/article/details/7004710
運行adb logcat cocos2d-xdebug info:D *:S應該就可以過濾掉其它信息了,但運行後發現什麼信息都沒有了,這是爲何?
另外建立了個androidproject。調試後發現tag裏有空格adb就沒法正確過濾,問題清楚了。如下需要改動一下cocos2dx的log函數。
打開cocos2d\cocos\base\CCConsole.cpp,找到_log函數(log和CCLog都調用這個),裏面
#ifCC_TARGET_PLATFORM == CC_PLATFORM_ANDROID
__android_log_print(ANDROID_LOG_DEBUG, "cocos2d-x debug info", "%s", buf);
改動cocos2d-x debug info爲cocos2d-x_debug_info。
又一次編譯project,命令行運行adblogcat cocos2d-x_debug_info:D *:S,可以正常過濾了,僅僅顯示cocos2dx的log輸出。
注意,假設改動的是project路徑下的cocos2d\cocos\base\CCConsole.cpp文件。下次建立新project。log函數的tag仍是cocos2d-x debuginfo,想一勞永逸的話,可以改動cocos2d-x-3.0\cocos\base\CCConsole.cpp。
這樣建立新project就會把這個文件拷貝到新project下,就不用每次都改動了。