『壹』 cocos2dx最新版用命令行打包apk為何會出現各種錯誤,如何解決
具體做法。
1、安裝必要的庫和工具包,以及配置相關環境變數,請按照cocos2d-x-3.0rc0toolstoluaREADME.mdown說得去做,不做贅述。
2、寫c++類(我測試用的是cocos2d-x-3.0rc0testslua-empty-.cpp)
3、寫一個生成的python腳本,你不會寫,沒關系,我們會照貓畫虎
1)進入目錄cocos2d-x-3.0rc0toolstolua,復制一份genbindings.py,命名為genbindings_myclass.py
2)把生成目錄制定到咱工程里去,打開genbindings_myclass.py把
?
1
output_dir = '%s/cocos/scripting/lua-bindings/auto' % project_root
改成
?
1
output_dir = '%s/tests/lua-empty-test/project/Classes/auto' % project_root
3)修改命令參數,把
?
cmd_args = { 'cocos2dx.ini' : ( 'cocos2d-x' , 'lua_cocos2dx_auto' ),
'cocos2dx_extension.ini' : ( 'cocos2dx_extension' , 'lua_cocos2dx_extension_auto' ),
'cocos2dx_ui.ini' : ( 'cocos2dx_ui' , 'lua_cocos2dx_ui_auto' ),
'cocos2dx_studio.ini' : ( 'cocos2dx_studio' , 'lua_cocos2dx_studio_auto' ),
'cocos2dx_spine.ini' : ( 'cocos2dx_spine' , 'lua_cocos2dx_spine_auto' ),
'cocos2dx_physics.ini' : ( 'cocos2dx_physics' , 'lua_coco
『貳』 cocos2dx 3.16怎麼編譯
先給自己科普一下, android sdk 是給java開發者用的, 咱C++開發者用的是android ndk, 所以就是使用ndk來編譯cocos2dx程序了
使用命令行創建一個項目, 我這里創建的是一個lua項目:cocos new lua_proj2 -p com.company_name.program_name -l lua -d d:\xxx\xxx
此時創建了一個DEMO程序, 此時就可以使用cocos命令生成一個apk包, 進入到目錄lua_proj2\frameworks\runtime-src下面, 在此目錄下面執行命令cocos compile -p android 就會生成一個apk包, 把這個拖到genymotion上面, 就安裝跑起來了.
上面說的是不使用eclipse的方式來生成一個apk包, 下面記錄一下在eclipse中載入lua_proj2這個項目, 並生成apk包的過程. 為什麼一定要將cocos2dx項目導入到eclipse中來生成apk包呢, 因為在eclipse中可以連接AVD來調試android程序, 再者, eclipse可以運行在linux環境下面, 後面我打算在linux進行開發, 所以這一步是一定要跨出去的
打開eclipse, 載入lua_proj2項目, 在此注意一下, 不需要載入libcocos2dx這個項目, 只要載入lua_proj2這個自己新建一項目即可
在eclipse中右擊lua_proj2 -> Properties. 出現Properties for lua_proj2框框
創建一個新的builder
第一個紅框是builder名稱, 隨便填寫, 第二個紅框框是NDK生成工具, 即, 使用此工具來編譯C++項目, 第三個紅框框是工作目錄, 此處我使用lua_proj2項目目錄作為工作目錄, 切換到Environment選項卡, 新建一個在此生成器中使用的環境變數NDK_MODULE_PATH, 值是......\lua_proj2\frameworks\cocos2d-x\cocos;......\lua_proj2\frameworks\cocos2d-x;......\lua_proj2\frameworks\cocos2d-x\external, 前面的.......是絕對目錄的省略, 這里要輸入絕對路徑名稱, 在此我就不寫絕對路徑了.
一路OK下去, 到下面這個畫面
這個就新建立的builder, Project->Build Project
出現大量的error: 'override' does not name a type錯誤, 這是由於NDK的版本太低了, override是C++11中才有的關鍵字, 而到NDKr10才支持C++11, 所以要升級NDK. 到官網去下載吧
不大, 400多M的樣子, 更新完成之後, 看一下ndk\toolchains目錄下面的編譯器, 我的目錄是下面這樣子的
我很想使用clang來編譯, 但是現階段我還不會配置, 就用GCC吧, x86-4.6 & x86-4.8兩個版本的GCC, 4.8的支持C++11
在Application.mk中添加一句NDK_TOOLCHAIN_VERSION = 4.8 就是指定使用GCC4.8來編譯cocos2dx項目, 跑起來了, 下面是eclipse跑起來的console輸出
跟命令行下執行cocos compile -p android 跑出來的是一樣的, 都是在編譯程序. 下面進入到在eclipse下面調試程序
『叄』 如何在eclipse下調試cocos2dx
cocos2dx程序移植到eclipse
必要組件:
1.macos gcc編譯器,若沒有,在xcode->preference->downloads中下載command line tools(在命令行下輸入g++,若顯示command not found 則沒有)
2. android sdk :本機目錄為 /Users/zhangyao/IDE/android-sdk-macosx
3.cocos2d-x:本機目錄為 /Users/zhangyao/Desktop/cocos2d-x-2.1.1
4.ndk 本機目錄為 /Users/zhangyao/Desktop/android-ndk-re8
地址:http://developer.android.com/tools/sdk/ndk/index.html
選擇macos 64bit
5.cdt 若沒有 則在help->install new software中下載
Programming Languages->C/C++ Development Tools.
1.配置環境變數
終端中 輸入 sudo vi ~/.bash_profile
輸入i進入編輯環境 輸入以下內容:
export COCOS2DX_ROOT=~/Desktop/cocos2d-x-2.1.1/
export NDK_ROOT=~/Desktop/android-ndk-r8e/
export ANDROID_SDK_ROOT=~/IDE/android-sdk-macosx/
export PATH=$PATH:$ANDROID_SDK_ROOT/tools
按下esc鍵退出編輯
輸入:wq保存退出
2.在eclipse中創建項目(設項目名稱為test)
cd Desktop/cocos2d-x-2.1.1
./create-android-project.sh
輸入工程標志符com.cwa.test
選擇android版本號:6
輸入工程名:test
cd test/proj.android/
./build_native.sh
打開eclipse,選擇file->new->other->Android->Android Project from Existing code->next->Browse->選擇目錄至cocos2d-x-2.1.4/test/project.android->finish
選擇file->new->other->c/c++->convert to a c/c++ Project->next->選擇上面建好的工程->finish
至此工程test創建完成
3.配置工程屬性
右鍵工程名->properties
3.1 c/c++ Build 把use default build command的勾去掉,在build command中寫(其中test為工程名):
bash ${workspace_loc:/test}/build_native.sh NDK_DEBUG=1 V=1
3.2 點開c/c++ Build 選擇Environment->add
name:NDK_ROOT
value:/Users/zhangyao/Desktop/android-ndk-r8e
3.3 c/c++ General->Path and Symbols->add
/Users/zhangyao/Desktop/android-ndk-r8e/sources/cxx-stl/system/include
全部修改完,點OK
在GUN C++中加入
/Users/zhangyao/Desktop/cocos2d-x-2.1.1/cocos2dx/include
/Users/zhangyao/Desktop/android-ndk-r8e/platforms/android-14/arch-arm/usr/include
在Android中 最好選擇最新的Android4.2.2(確保Andorid模擬機中已經下載好了4.2.2的API)
4.打開項目的AndroidMainfest.xml
把android:icon="@drawable/icon">一行改為android:icon="@drawable/ic_launcher">
android:minSdkVersion="8"
把8改成14
android:minSdkVersion="14"
關閉AndroidMainfest.xml save changes選yes
在src/org.cocos2dx.lib/Cocos2dxActivity.java中
在// ...add to FrameLayout
framelayout.addView(this.mGLSurfaceView);
這句後面加上一句(如果沒有):
this.mGLSurfaceView.setEGLConfigChooser(8 , 8, 8, 8, 16, 0);
打開工程jni目錄下的Android.mk
MY_CPP_PATH := $(LOCAL_PATH)/ \
$(LOCAL_PATH)/../../Classes/
MY_FILES_SUFFIX := %.cpp
My_All_Files := $(foreach src_path,$(MY_CPP_PATH),$(shell find $(src_path)/.))
My_All_Files := $(My_All_Files:$(MY_CPP_PATH)/./%=$(MY_CPP_PATH)%)
MY_CPP_LIST := $(filter $(MY_FILES_SUFFIX),$(My_All_Files))
MY_CPP_LIST := $(MY_CPP_LIST:$(LOCAL_PATH)/%=%)
LOCAL_SRC_FILES := $(MY_CPP_LIST)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes
LOCAL_C_INCLUDES += $(shell ls -FR $(LOCAL_C_INCLUDES) | grep $(LOCAL_PATH)/$)
LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES:$(LOCAL_PATH)/%:=$(LOCAL_PATH)/%)
把cocos2d-x引擎的根目錄的cocos2dx/platform/android/java/src文件夾下org文件夾 復制到項目的src包(test/proj.android/src)下替換org文件夾
5.把xcode中所有的自建的類文件(包括.h和.cpp)復制到cocos2d-x-2.1.1/test/Classes
所有的資源文件復制到cocos2d-x-2.1.1/test/Resources
工程的圖標文件放在cocos2d-x-2.1.1/test/res下的文件夾中
至此工程配置完畢。
在對工程作出修改,比如加入/替換新的資源文件,class後,最好對工程clean一下,如果clean後還出現問題,可以重新執行一下build_native命令。
Test 的 模擬器配置
最後,執行以下步驟可以把xcode和eclipse相關聯,讓在xcode中做的更改,eclipse可以自動做出更改。
1.打開Xcode中的test項目(項目名和eclipse中的相同)
選擇classes分組,點刪除,選擇Move to Trash
2.在工程中添加新group,還命名為classes,右鍵classes->addFIles
然後把cocos2dx/test/classes中的類都添加回來,這樣eclipse和xcode就公用了這些文件,在一個中做出更改,另一個里就會自動更改,如下圖:
另:1. Android聯網
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.android中的R文件 ,是伴隨著加入資源等自動更新的
Android 在開發中會自動生成一個 R.java 文件 ,這個文件是自動生成的,最好不要去改。不過有時候這個 java 文件會跟我們捉迷藏,在程序中 R.xx.xxx 會出現經常報錯現象。
1 對著工程點擊滑鼠右鍵 選擇 Build Project,R.java 文件又回來。這樣R.xx.xxx 就能 X 的出來了。
如果不行 試用第二種 方法
2 選擇eclipse/myeclipse 的 clean 這樣R文件也會出現
如果還不行 試用第三種
3 經過上面兩種方法都不行 使用絕招 從別的工程中拷貝一份R文件過來 然後string.xml里隨便改動一下 即可更新R文件
如果還不行 試用第四種
4 經過上面的3種方法都不行 說明我們的工程有問題 好好檢查吧
比如resoure資源中的文件 命名,例result_main.xml,如果寫成Result_main.xml是錯誤的 需要全部小寫
『肆』 cocos2dx3.10 怎麼運行cocos2dx庫
一、通用准備工作
1、安裝Cocos2d-x 3.1
在Cocos2d官網上下載 Cocos2d-x 3.2+引擎 ,下載後解壓縮。
2、安裝Eclipse與Android SDK
這個在Mac上或是PC上開發都是可以通用的。
Eclipse 在其官網下載( 官網地址 )。
Android SDK 在Android開發者中心下載( 地址 )。
Eclipse是開發Android需要用到的IDE。這是個很牛的IDE,有許多插件讓他變得三頭六臂。要開發Android的程序,需要下載相關的插件,但如果每個插件要自己配置,會是很蛋痛的事情。
如果是新手,推薦使用:ADT Bundle。這是Eclipse+Android SDK的合體,所有的項目都已經幫你配置好了。
3、安裝JDK
Eclipse需要Java環境才能運行。如果事先沒有安裝Java環境,則會報錯。
解決方案安裝jdk( 下載地址 )。
一般來說安裝之後會自動配置好環境變數。如果還沒有解決問題,請查找網路上關於JDK安裝的攻略,很多的。
4、安裝CDT插件 ( 下載地址 )
這是個Eclipse的插件,用來支持Eclipse中C/C++語言的開發。
從Eclipse的官網下載,下載之後,將features和plusins這兩個文件夾裡面的內容復制到Ecplise安裝目錄下對應的文件夾之後就可以了。
5、安裝NDK ( 下載地址 )
這是進行C/C++與Java混合編譯的必要工具。記下下載之後解壓到的目錄,因為到之後的安裝中會用到。
6、安裝ANT ( 下載地址 )
Cocos的Android開發需要用到它,所以下載下來安裝好吧。
二、PC環境下配置過程
1、安裝VS2012 ( 官方地址 )
網上還有很多其他下載地址。
最好是2012,我曾經試過2010,2013,都會出這樣那樣的問題。所以,2012!
2、安裝python 2.7.6 ( 下載地址 )
因為Cocos2d-x的安裝程序是用phthon寫的,所以需要這個軟體。不要下載python3.0以上的版本,否則運行會出錯。如果是Mac,那麼天生就自帶了。
3、進行開發環境配置
以上的工作完成之後,就可以進行配置了。啟動Windows的命令行(CMD)工具。進入Cocos2d-x 3.1的安裝目錄,執行:
python setup.py
Cocos2d-x 3.1版本使用這個setup.py來安裝,十分方便。執行之後會讓你配置上面准備工作中所安裝的:ANT、NDK、SDK等目錄,把安裝到哪兒去了填寫進入就行。
4、建立自己的項目
用setup.py配置好Cocos2d-x的環境之後,你的命令行中就會多如「cocos」的命令,新建項目將使用這個命令進行。示例:
cocos new hello(項目名稱)-p com.hello(包名字)-l cpp(項目類型) -d E:\MyCocos\cocos2d(目錄)
新建的項目會把所有的源文件和庫都拷到你的項目目錄中。所以新建的項目文件會很大,有許多人懷疑這個的必要性,不過到你之後的開發中就會知道這種配置方法是對的了。
項目建立好之後,就可以開發了:
A、進行VS2012的開發。
找到你的項目目錄下的:proj.win32,打開裡面的解決方案就行。剩下的就是你的任務了。一般來說,直接就可以運行。
B、進行Android的開發。
使用Eclipse中的項目導入,導入proj.android中的項目方案。導入之後,因為SDK的問題,一般無法啟動,關於這個問題,以及其它的問題,請參見(四、其它問題解決方案)。
三、MAC環境下配置過程
1、注冊蘋果開發者賬號 ( 注冊地址 )
如果不使用真機,使用模擬器調試,那麼有開發者賬號應該就足夠了。
如果要使用真機調試,需要購買IOS開發者會員,688RMB一年。我看到之前的攻略說要99美元,但是看現在的頁面的的提示,應該只要有網銀就可以支付了。網上的攻略寫得非常復雜,說要下載證書什麼什麼的,現在統統都不需要了,XCode全部為您代勞了,只要照提示一路點同意就行。
2、安裝XCode
在你的開發者首頁下面就有XCode的下載。通過App Store下載安裝即可。
請使用最新的XCode(需要OS X 10.8以上系統支持),並使用App Store安裝。我的MacBook Air從朋友那裡拿來時還是10.7,因為下載總是中斷,屢次不成功,所以用XCode 4.6,但好像不通過App Store安裝會出這樣那樣的問題。所以強烈推薦使用最新的版本。
3、進行開發者環境配置。
與PC的配置一樣,打開MAC的終端程序,執行setup.py,配置好各種SDK的路徑就行。但MAC需要再加上一句:
source /Users/yourname/.bash_profile
這是用來刷新配置文件的。
4、建立項目文件
使用命令行建立。
如果你像我一樣用兩個平台(PC與MAC)開發,可以共享同一個項目目錄。我的項目文件是放在PC上的,MAC通過共享訪問項目文件。
項目建立好之後就可以開發了。MAC下的配置相對簡單,使用XCode打開項目目錄下的proj.ios_mac下的項目配置文件就行。之後基本不會出錯的。
四、其它問題解決方案
Eclipse與Android相關:
問題 :SDK錯誤
因為Cocos2d-x的模版默認是使用Android 2.3.3(API-10),如果新安裝的ADT Bundle或Android SDK,是API-19,則會出現錯誤,解決方案是通過Android SDK中的管理工具(SDK Manager)下載Android 2.3.3的SDK。
問題 :Project 'XXX' is missing required source folder: 'gen'
這個問題就是上面的SDK錯誤導致的。
問題 :undefined reference to 'cocos2d::network::HttpClient::getInstance()'
我是使用網路庫(network)的時候出現這個錯誤的。如果你使用其它庫,解決方案是一樣的。原因是缺少庫的引用。解決方案是在Android.mk裡面增加:
LOCAL_WHOLE_STATIC_LIBRARIES += cocos_network_static
Cocos2d-x的開發者已經在Android.mk裡面加上了很多這種路徑,平時是注釋掉的。您要使用時把這些增加上去就行。
問題 :fatal error: cocos-ext.h: No such file or directory
問題分析:缺少頭文件路徑的引用
需要在:Android.mk裡面增加
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../cocos2d/extensions
Cocos2d-x的開發者已經在Android.mk裡面加上了很多這種路徑,平時是注釋掉的。您要使用時把這些增加上去就行。
問題 :The import org.cocos2dx.lib cannot be resolved。
無法找到指定的庫文件。解決的方案是增加路徑的引用:Project Properties -> Java Build Path -> Source and then linking 「項目目錄/cocos/platform/android/java/src」
VS2012相關:
問題 :「extensions/ExtensionMacros.h」: No such file or directory
無法打開包括文件。
1、解決方案中,添加「現有項目」--> libExtensions 具體目錄: ..\cocos2d\extensions\proj.win32\libExtensions.vcxproj
2、項目中添加引用-->libExtensions
3、通過:屬性->C/C++->附加包含目錄。附加包含目錄:$(EngineRoot)
如果你使用其它的文件,解決方案是一樣的。1、增加項目的引用。2、附加頭文件的包含目錄。
當遇到COCOS2DX 3.2+版本創建許可權問題時:
首先,打開終端cd到目錄 /cocos2d-x-3.2/tools/cocos2d-console/bin 下, 運行 cocos.py 腳本創建文件。
[javascript] view plain
./cocos.py new HelloWorldDemo -p com.coco2dx.org -l cpp -d ~/Desktop
參數說明:
HelloWorldDemo為項目名稱
-p 後面接包名
-l 後面接開發語言類型,有cpp, lua, js三種類型
-d 後面接項目存放的目錄
如果出現 -bash: ./cocos.py: Permission denied ,是因為沒有許可權。 用命令 chmod 修改一下目錄下的 cocos.py 許可權就可以了
[cpp] view plain
chmod u+x cocos.py