cocos2d-x升級到3.0後變化不小,除了API的變化(主要是函數和類名稱變化,以及使用了C++11的不少特性,function/bind, lamda, std::thread…),建立和編譯工程也做了一些簡化調整。本文主要討論一下cocos2d-x3.0 在android平台開發的環境設定及工程建立編譯流程。
1. 初始設定
除了2.x所需要的python,jdk, android sdk和ndk之外,還需要部署apache-ant。
1) 在path中設定好java環境變數:
JAVA_HOME=C:\jdk_xx.xx.xx
path加上%JAVA_HOME%\bin;
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
2) 安裝python 2.x版本。
3) 部署好android sdk, ndk, ant之後,運行...\cocos2d-x-3.0\ setup.py。提示輸入ndk,sdk和ant目錄,這裡要注意,androidsdk設定為 …\adt-bundle-windows-x86\sdk,ndk目錄設定為…\android-ndk,而ant目錄要設定為…\apache-ant\bin,和前兩者設定為根目錄不同,要設定到bin目錄,否則不生效,部署apk的時候會提示找不到ant。
4) 三個目錄設定完成後自動關閉setup.py指令碼。開發環境設定完畢。
2. 建立工程
2.x
cocos2d-x\tools\project-creator目錄下,命令列執行python create_project.py –project ABC –package com.xyz.abc –language cpp建立工程
建立好的工程目錄在cocos2d-x\projects,不能複製到其他路徑,否則會有工程依賴問題。
3.0
cmd命令列進入自己選擇的工程路徑,執行cocos new MyGame -p com.your_company.mygame -l cpp
等待工程建立完畢。
3.0版本會把依賴的cocos2dx源檔案複製到自己建立的工程目錄,在cocos2d檔案夾下。所以不存在拷貝工程引起的依賴問題。
3. 編譯工程
建立完成後,cd進入工程目錄,執行cocos compile –p android –j 4編譯工程,cocos run –p android –j 4編譯+部署apk+運行。
-p參數指定平台
-j參數指定使用多少個線程執行編譯,官方的說法是可以加快編譯速度。(可選項)
預設是debug編譯,-m release可以指定編譯為發布版。注意,release必須小寫,寫成Release無效。
更多參數參見官方文檔:
https://github.com/cocos2d/cocos2d-console/issues/27
4. 部署apk
cocos deploy –p android部署編譯好的apk,cocos run –p android可以編譯好直接部署。
5. 清理工程
官方文檔的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可用,原因不明,那就不用命令清理工程了,改用手動清理吧,很簡單,需要清理時把porj.android目錄bin, obj, libs, assets, gen目錄都刪除就好了。可以寫個指令碼完成。
6. 開發環境
cocos2d-x2.x版本建立的工程可以直接使用vs2010編譯。在windows上開發調試好後移植到android平台就可以了。升級到3.0版本後,由於使用了c++11,最低支援版本為vs2012。vs2012要求win7以上os,沒法在xp系統上偵錯工具了。
既然如此,就不win32工程進行開發了,直接編譯android平台,也省去了移植這一過程。
命令列編譯部署android工程前面都介紹過了,下面需要的就是選擇一個IDE方便開發,這裡推薦codeblocks。建立工程步驟如下:
1) 在遊戲工程根目錄建立一個codeblocks空工程。
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)
添加其他模組與之類似。
7. Log輸出
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應該就可以過濾掉其他資訊了,但執行後發現什麼資訊都沒有了,這是為什嗎?
另外建立了個android工程,調試後發現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。
重新編譯工程,命令列執行adblogcat cocos2d-x_debug_info:D *:S,可以正常過濾了,只顯示cocos2dx的log輸出。
注意,如果修改的是工程路徑下的cocos2d\cocos\base\CCConsole.cpp檔案,下次建立新工程,log函數的tag還是cocos2d-x debuginfo,想一勞永逸的話,可以修改cocos2d-x-3.0\cocos\base\CCConsole.cpp。這樣建立新工程就會把這個檔案拷貝到新工程下,就不用每次都修改了。