cocos2dx編譯
A. 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下面調試程序
B. cocos2dx mac 怎麼編譯cocos
cocos2dx程序移植到eclipse 必要組件: 1.macos gcc編譯器,若沒有,在xcode->preference->downloads中下載command line tools(在命令行下輸入g++,若顯示command not found 則沒有) 2. android sdk :本機目錄為 /Users/zhangyao/IDE/android.
C. cocos2dx 2.2.1工程編譯android版本,有release和debug之分嗎
您好,很高興能幫助您
1. 下載cocos2dx 2.2.1
去cocos2dx官網下載就好,最好是2.2.1版本。3.0版本變化比較大,也沒測試過。
3. 創建工程
使用cocos2dx目錄下的tools/project-creator/create_project.py創建一個工程。
4. 編譯android版本
網上很多文章說,編譯cocos2dx的Android版本時需要安裝cygwin之類的,其實這對於目前的ndk版本來說是不必要的,因為高版本的ndk都集成了cygwin的一些功能。我這里使用的是ndk r9d。下面來說一下操作步驟。
我編譯的習慣是直接在jni目錄下預先ndk-build命令,因為在Windows下使用.sh結尾的文件太怪異了。首先來看一下build_native.sh乾的工作:
這是build_native.sh中實際工作的部分。可以看到它使用NDK_ROOT下的ndk-build來編譯,還導入了NDK_MODULE_PATH, 這個NDK_MODULE_PATH是為Android.mk中的import-mole提供路徑選擇。
現在來導入NDK_MODEL_APTH, 在Android.mk的import-mole之前加上cocos2dx中的幾個路徑:
$(call import-add-path, G:/cocos2dx)
$(call import-add-path, G:/cocos2dx/cocos2dx/platform/third_party/android/prebuilt)
運行ndk-build, 編譯。
編譯時可能出現這樣的錯誤:error: GLES2/gl2.h: No such file or directory,這是因為低版本的Android版本不支持opengl es2.0,在Application.mk中加上:
APP_PLATFORM := android-17
5. 生成apk包
在eclipse下打開創建的工程,導入相關的包後,在AndroidMenifest.xml中加入:
android:debuggable="true"
表明這是一個可以調試的包。運行,結果出現:
這是因為該工程默認使用build_native.sh編譯:
因為build_native.sh現在已經沒用了,所以把它改成:
這個意思是,直接使用NDK_ROOT環境變數下的ndk-build.cmd來編譯工程,編譯成debug版本,編譯成armeabi和armeabi-v7a兩種指令格式的庫,執行這個命令的目錄是工程目錄下的jni文件夾。debug版本和armeabi-v7b主要是為了後面使用visualGDB調試做准備。
再編譯,就可以生成apk包了。
VisualGDB調試
1. 下載並安裝VisualGDB, 安裝完成後,在Visual Studio的目錄中可以看到Android選項:
2. 配置VisualGDB, 在Android -> Setup SDK/NDK location
主要配置JDK,SDK,NDK,ANT路徑
3. 設置要調試的apk包。Android -> Debug a Custom APK file
4 設置完成後,在代碼中設置斷點,點擊Debug, 開始調試
5. 等apk安裝完成後,程序會運行到斷點出,就可以開始用Visual Studio調試了
你的採納是我前進的動力,
記得好評和採納,答題不易,互相幫助,
D. cocos2dx怎麼編譯到android
如果你用的是windows系統作為開發環境,使用的是cocos2d-x3.2最新版的,你在一開始安裝cocos2d-x的時候,會要求輸入
NDK_ROOT
ANDROID_SDK_ROOT
ANT_ROOT
最新版的cocos2d-x使用了python來進行安裝和編譯程序的,所以你要先在你的windows系統上安裝上python.安裝好之後,下載最新版的cocos2d-x,然後,cd到這個目錄下,你會看到一個有一個setup.py的文件,.py後綴的文件就是python的腳本文件了。是要用python來運行的。如果你安裝好python之後設置好了python的環境變數,這個時候,你只要在命令行里運行:
python setup.py就可以了。
然後你就可以看到要求你輸入的這三個路徑了。
這三個工具的所在路徑,這幾個路徑輸入對了之後,你的cocos2d-x就安裝好了,這個時候,在cmd里創建一個新項目,創建的方法是在命令行里輸入:
cocos new youprojectname -p com.youcom,youprojectname -l cpp -d 你的新建項目所在路徑
然後回車,你就可以看你的的項目會在你的新建項目路徑下有一個youprojectname的文件夾,打開,你就可以看到里邊有各個系統的project文件夾了,還有一個Class和Resources的文件夾。這個時候,你在命令行里cd到你的proj.android文件夾下,使用命令:
python bulid_native.py
就可以對你的安卓新建的helloworld項目進行編譯了。不出意外,要不然一分鍾就編譯好了。會生成一個libcocos2dcpp.so在你的pro.android/libs/armabi的路徑下。然後打開你的ADT,也就是eclipse,進入pro.android目錄,導入android項目到eclipse。這個時候可能會報一個cocos2d-x的lib庫錯誤,只要把cocos2d-x的
cocos2d/cocos/platform/android/java/src
目錄下的文件夾復制到pro.android/src下就可以解決這個問題了。
然後,接上你的android手機,並且在手機中打開開發者模式。點擊程序遠行設置,選擇使用設備運行。在彈出的一個選擇手機設備的框時選擇run,不一會,你的helloworld項目就可以在手機上看到了。
如果要調試,你可以在eclipse中打開logcat,看到cocos2d-x的log輸出信息。
總的來說,android最好的開發環境還是mac系統。因為在mac系統下很多linux命令都可以使用。不像windows系統比較蹩腳。
E. cocos2d-x 3.8 編譯 android 問題,版主能幫忙解決下嗎
一 無法替換cocos2d-x本身自帶的libxml2
為什麼需要自己編譯libxml2:
由於我以前解析xml使用的是Tree的方式,在Win32以及GMO上能夠正常運行,但是在ndk下編譯的時候遇到問題了,原來cocos2d-x使用的libxml2把Tree的解析方式關閉了。於是乎擺在我面前的是兩條路,第一條是重新編譯一版libxml2,打開Tree的解析方式;第二條是修改以前的代碼,採用SAX的解析方式。由於修改代碼的工作量比較大,所以決定先採用第一個方案。(PS:推薦大家在以後的程序中解析xml使用SAX的方式,省很多內存)
編譯時遇到的問題:
先將libxml2源代碼(從Android 2.2的源代碼中拷貝出來的,稍作修改)拷貝到cocos2d-x根目錄,然後修改yourgame/android/廳猜閉jni/Android.mk, 修改如下
subdirs := $(addprefix $(LOCAL_PATH)/../../../,$(addsuffix /Android.mk, \
libxml2 \ # this is the new add content
cocos2dx \
CocosDenshion/android \
))
subdirs := $(addprefix $(LOCAL_PATH)/../../../,$(addsuffix /Android.mk, \
libxml2 \
cocos2dx \
CocosDenshion/android \ ))
然後將cocos2dx\platform\third_party\android\libraries\libxml2.a刪除,再修改yourgame和cocos2d-x使用的新的libxml2的頭文件目錄,最後編譯。然後果斷的悲劇了,libxml2的代碼不會被編譯,然後在鏈接cocos2d-x so的時候會提示link error (libxml2的介面找不到實現)。
解決辦法:
修改cocos2d-x的Makefile文件,修改如下:
LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/platform/third_party/android/libraries) \
-lGLESv1_CM -llog -lz \
-lpng \
-ljpeg \
# -lxml2 #delete the old style of link libxml2
LOCAL_STATIC_LIBRARIES := libxml2 # add to enable auto build of libxml2
yourgame 的makefile 的修改參考cocos2d-x。 哈哈,終於能正常編譯了。
二 編譯命令始終是compile++ thumb 或者 compilethumb
為什麼不要使用thumb:
thumb指令集是為了滿足一些低端的設備而加上的,使用的是16位的指令集,能壓縮扮裂代碼密度,但是指令比普通的32位arm指令弱很多,所以建議關閉掉。
解決辦法:
在每個Android.mk 中每個Mole加上LOCAL_ARM_MODE := arm ,這樣就能看到compile++ arm 和compile arm 了。
三 無法載入資源
問題描述:
在Android 程序編譯完打包之後,安裝上設備,提示"Get data from file **** failed", 但是發現文件路徑是對的,只是中間有"."或者".."。
問題產生的原因:
在請教高人之後知道android程序中使用的資源是打包在壓縮文件裡面的,程序中只能通兆團過在壓縮包的全路徑名去獲取文件,並且不能有相對路徑(如"." , "..")。而且,不能通過fopen去打開,因為文件目錄根本就沒有這個文件。
解決辦法:
1. 將plist文件和png,動畫配置xml和png放在相同的目錄,plist和xml中包含的文件名和plist以及xml在相同的目錄下。
2. 在解析xml的時候不能使用xmlReadFile,而使用如下方式:
const char* xmlConfFullPath = CCFileUtils::fullPathFromRelativePath(yourfilename);
CCFileData data(xmlConfFullPath, "rt");
unsigned long size = data.getSize();
char *pBuffer = (char*) data.getBuffer();
doc = xmlReadMemory(pBuffer, size, NULL, "UTF-8", XML_PARSE_RECOVER);
四 dynamic_cast不能使用
問題描述:
dynamic_cast返回NULL,但是在Win32上是能正常工作的。
原因:
不詳,反正搞不定,試過以下各種辦法,均以失敗告終:
1. 修改Application.mk,添加如下:
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti
2. 修改編譯器,使用gcc編譯C+代碼,且在鏈接時將-lsupc+ 換成-lstdc++
最後只能放大招:
將dynamic_cast 改為static_cast, 哎,先將就著用吧。
F. 請教高手cocos2dx編譯的問題
操作方法如下:
make: 進入目錄「/cygdrive/e/cocos2d-x-2.1.4/Balloon/proj.android」
Compile++ thumb : game_shared <= AppDelegate.cpp
In file included from jni/../../Classes/AppDelegate.cpp:6:0:
jni/../../Classes/main.h:8:19: fatal error: tchar.h: No such file or directory
compilation terminated.
/cygdrive/f/Android/android-ndk-r9/帆辯build/core/build-binary.mk:348: recipe for target `obj/肢轎叢local/armeabi/objs/game_shared/__/__/Classes/AppDelegate.o' failed
make: *** [obj/歷櫻local/armeabi/objs/game_shared/__/__/Classes/AppDelegate.o] Error 1
make: 離開目錄「/cygdrive/e/cocos2d-x-2.1.4/Balloon/proj.android」