編譯cocos2d
『壹』 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系統比較蹩腳。
『貳』 請教高手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」
『叄』 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下面調試程序
『肆』 如何使用 CCache 進行 Cocos2d-x 編譯加速
CCache是C/C++的編譯器緩存。當相同的編譯被再次編譯時,進行檢測並通過之前編譯的緩存進行編譯加速。所以我們可以通過這種方法給Cocos2d-x Android的編譯加速。使用這種方法,在i7 CPU的Macbook Pro Retina上編譯,我們的Cocos2d-x Android工程編譯時間可以從10分鍾減少到30秒!!
注意:以下操作僅對Mac OS X有效。
我們使用homebrew:
brew
install --HEAD ccache
或者通過源碼安裝:
git
clone ht tps:/ /github.co m/jrosd ahl/ccache.git
cd
ccache
./autogen.sh
./configure
make
make
install
cp
/usr/local/bin/ccache /usr/bin/
注意:默認的安裝路徑是 /usr/local/bin,我們需要拷貝ccache到/usr/bin/,不然ndk-build會找不到並報錯
如果終端報錯說找不到autoheader,這說明我們需要先安裝automake:
brew
install automake
但是,如果如果報錯是說找不到brew,我們就必須先安裝brew:
ruby
-e "$(curl
-fsSL
確保ccache的路徑可以被$PATH識岩吵別,運行命令:
ccache
如果你看到幫助信息,恭喜你,安裝成功了!
在android上配置編譯環境
我們必須先設置以下環境變數來使用ccache:
vim
~/.bash_profile
Add
following lines:
export
USE_CCACHE=1
export
NDK_CCACHE=/usr/local/bin/ccache
運行命令行:
ccache
-M 10G
這個命令將緩存大小設置為10G。當然,如果你的硬碟有足夠的空間,你也可以將此設置為50G。
然後,我們跳轉到NDK目錄,如果你忘了這個路徑,你可以使用以下命令來查看:
which
ndk-build
以下是我的輸出結果:
/developer/android/android-ndk-r9b/ndk-build
所以,我的NDK_ROOT是:
/developer/android/android-ndk-r9b
打開文件粗廳侍:$NDK_ROOT/build/core/default-build-commands.mk
找到以下章節並加入ccache,如下:
ifneq
($(findstring ccc-analyzer,$(CC)),)
TARGET_CC
= $(CC
else
TARGET_CC
= ccache $(TOOLCHAIN_PREFIX)gcc #Add ccache support
endif
TARGET_CFLAGS
=
TARGET_CONLYFLAGS
=
ifneq
($(findstring c++-analyzer,$(CXX)),)
TARGET_CXX
= $(CXX)
else
TARGET_CXX
= ccache $(TOOLCHAIN_PREFIX)g++ #Add ccache support
endif
TARGET_CXXFLAGS
= $(TARGET_CFLAGS) -fno-exceptions -fno-rtti
編譯cocos2d-x游戲伏搜
選擇cocos2d-x根目錄,運行:
python
build/android-build.py -p 10 cpp-tests
新建一個終端窗口,運行:
ccache
-s
這個命令會列印出ccache狀態,如下:
cache
directory /Users/heliclei/.ccache
primary
config /Users/heliclei/.ccache/ccache.conf
secondary
config (readonly) /usr/local/etc/ccache.conf
cache
hit (direct) 13588
cache
hit (preprocessed) 11145
cache
miss 696
called
for
link 1
called
for
preprocessing 14
preprocessor
error 1
can't
use precompiled header 129
no
input file 5
files
in cache 32222
cache
size 5.4 GB
max
cache size 30.0 GB
如果緩存的高速緩存命中(cache hit)和緩存大小(cache size)均為0,這就表示ccache沒有運行,我們必須從新檢查配置。
在Xcode中部署
配置Xcode(5.1)的ccache環境有點麻煩。我確實能調用ccache,但貌似沒有增加編譯速度。如果你有好的方法解決這個問題,請到github上為本篇教程提交pr!不過我們還是看看設置方法:
首先,我們添加2個自定義宏(user-defined macros)到cocos2d_libs的編譯選項中:
CC=$(SOURCE_ROOT)/../tools/xcode_ccache_wrapper
LDPLUSPLUS=$(DT_TOOLCHAIN_DIR)/usr/bin/clang++
然後,我們需要在$(COCOS2dX_ROOT)/tools/路徑下創建名為xcode_ccache_wrapper的腳本:
#!/bin/bash
export
CCACHE_CPP2=yes
『伍』 cocos2d-x 交叉編譯的問題
或帆櫻許是灶穗許可權問題,可以試試修改一下項目的許可權,改成 「隱轎卜完全控制」,並且將hellocpp文件夾屬性的 「只讀」 去掉。
『陸』 把cocos2d-x程序編譯成Android程序時出錯,怎麼解決啊
要使用NDK進行交叉編譯,NDK編譯步驟:
1.選擇 ndk 自帶的例子 hello-jni ,我的位於E:\android-ndk-r5\samples\hello-jni( 根據具體的安裝位置而定 ) 。
2.運行 cygwin ,輸棗沖碼入命令 cd /cygdrive/e/判伍android-ndk-r5/samples/hello-jni ,進入到 E:\android-ndk-r5\samples\hello-jni 目錄。
3.輸入 $NDK/ndk-build ,執行成功後凳哪,它會自動生成一個 libs 目錄,把編譯生成的 .so 文件放在裡面。 ($NDK是調用我們之前配置好的環境變數, ndk-build 是調用 ndk 的編譯程序 )
4.此時去 hello-jni 的 libs 目錄下看有沒有生成的 .so 文件,如果有,ndk 就運行正常啦。
『柒』 cocos2dx在windows下開發怎麼編譯成apk
下面一段是網路的說明:
Cocos2d-x 是一個支持多平台的 2D 手機游戲引擎,使用 C++ 開發,基於OpenGL ES,基於Cocos2d-iphone,支持 WOPhone, iOS 4.1, Android 2.1 及更高版本, WindowsXP & Windows7,WindowsPhone 8.[1]Cocos2d-x是一個開源的移動2D游戲框架,MIT許可證下發布的。這是一個C++ Cocos2d-iPhone項目的版本。Cocos2d-X發展的重點是圍繞Cocos2d跨平台。Cocos2d-x提供的框架外,手機游戲,可以寫 在C++或者Lua中,使用API是Cocos2d-iPhone完全兼容。Cocos2d-x[2]項目可以很容易地建立和運行iOS,Android 的三星Bada,黑莓Blackberry操作系統和更多。Cocos2d-x還支持Windows、Mac和Linux等桌面操作系統,因此,我們可以 編寫的源代碼很容易在桌面操作系統中編輯和調試。
總的來說,cocos2dx的android交叉編譯環境還是蠻麻煩的。下面內容就是我一步一步實現的過程。
第一部分 安裝
一、Cygwin安裝
這個安裝比較簡單,網上也有大把的例子,這里我只是簡述一下。
首先去官網www.cygwin.com下載安裝,安裝包分32位和64位兩種.視情況選擇了。因為只是編譯,這里選擇的是32位版本。
下載地址:http://cygwin.com/setup-x86.exe
然後默認安裝,在安裝源的時候,選擇
http://mirrors.sohu.com/cygwin 或 http://mirrors.163.com/cygwin ,哪個好用,就哪個。
安裝的時候,把開發包都選上就可以了。
我這里是把cygwin安裝在c:\cygwin目錄下面了。
註:這里默認的vi不是我們常用的vim,使用起來會很不習慣,你可以根據實際情況下載,在安裝的時候,選擇編輯器的vim,然後就可以用了。如果沒有vim,你用的時候在vi命令行輸入set nocp,就可以正常習慣使用了。
二、 adt-bundle安裝
現在adt-bundle都集成了下面的功能,這樣就不用再去配置eclipse插件了。
l Eclipse + ADT plugin
l Android SDK Tools
l Android Platform-tools
l The latest Android platform
l The latest Android system image for the emulator
下載地址:
Adt-bundle也同樣分32位和64位的,在這里照樣下載32位的版本
http://dl.google.com/android/adt/adt-bundle-windows-x86-20131030.zip。64位的地址我也加上http://dl.google.com/android/adt/adt-bundle-windows-x86_64-20131030.zip
下載完成後,解壓就可以使用。我這里是解壓到e:\adt-bundle
裡面有eclipse,sdk兩個目錄和一個SDK Manager管理軟體。運行SDK Manager可以下載你需要的SDK版本。
注意:你下載的java也要對應的32位和64位的環境,否則eclipse將會啟動不了。牢騷一句,oracle把java和mysql並入後,真是開源的最大悲劇。你去下載它,就明白了。祝願oracle早點倒閉。
三、ndk安裝
下載地址:
32位下載地址
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86-legacy-toolchains.zip
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86.zip
64位下載地址
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86_64-legacy-toolchains.zip
http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86_64.zip
然後解壓就可以了,我這里解壓到
E:\android-ndk-r9b
四、cocos2dx安裝
我這里下載的版本是cocos2dx v2.2。同時還有一個免費的編輯器CocoStudio,它提供了UI和動畫,資源編輯功能。可以不用mac下面那個收費的軟體了。
今天突然http://www.cocos2d-x.org/怎麼都下載不了,沒辦法,只好到https://github.com/cocos2d/cocos2d-x/這里下載了。找到對應的2.2版本。
Cocos2dx下載地址:
https://codeload.github.com/cocos2d/cocos2d-x/zip/cocos2d-x-2.2
Cocostudio下載地址:
http://d001.download.appget.cn/CocoStudio/DownLoad/v1.0.0.1/CocoStudio_Full_V1.0.0.1.exe
然後cocostudio默認安裝就可以了,我這里把cocos2dx解壓到e:/cocos2dx
五、python安裝
因為,cocos2dx創建工程,需要python,所以這里還需要下載python,去他的官網http://www.python.org/下載就可以了
下載地址:
http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi 這個下載32位版本就可以了。然後默認安裝。我這里安裝到了C:\Python27
六、ant安裝
這個是一個將軟體編譯、測試、部署等步驟聯系在一起加以自動化的一個工具,大多用於Java環境中的軟體開發。這里在生成apk的時候,也用到了。所以也要下載安裝。
http://mirrors.cnnic.cn/apache//ant/binaries/apache-ant-1.9.2-bin.zip
解壓到c:\ant就可以了
到這里,所以需要的軟體,都已經下載,並安裝了。
第二部分:配置
第一步:新建環境變數
點windows的開始菜單-〉計算機 右鍵菜單選擇屬性,彈出屬性對話框。然後選擇高級系統設置,如下圖
然後選擇環境變數
增加
ANT_HOME=C:\ant
PYTHON_HOME=C:\Python27
JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_16
NDK_ROOT=E:\android-ndk-r9b
ANDROID_SDK=E:\adt-bundle\sdk
然後編輯環境變數path,追加 %JAVA_HOME%\bin;%ANT_HOME%\bin;%PYTHON_HOME%;%NDK_ROOT%;%ANDROID_SDK%\tools;%ANDROID_SDK%\platform-tools;
這樣,就可以在CMD窗口執行相關的命令了。
第三部分 cocos2dx的工程准備
第一步:增加android_update.bat
在ant生成apk的時候,會需要知道,你編譯的目標是什麼版本和src.dir等信息。創建這個工程,就是為了自動更新它。批處理的內容是
android update project -p . -t android-10
該文件建好後,命名為android_update.bat,放在E:\cocos2dx\template\multi-platform-cpp\proj.android
注意,請先確認你的ANDROID_SDK是否安裝了對就的版本,android-10是對應的是android2.3,其他的版本請用對應的數字。執行e:\adt-bundle\SDK Manager.exe,如下圖所示:
這里的數字是19
那麼批處理的內容改為
android update project -p . -t android-19
第二步:修改build_native.sh
該文件在E:\cocos2dx\template\multi-platform-cpp\proj.android目錄中,因為在執行build_native.sh的時候,會出現的許可權的問題,所以在這個腳本中,增加了許可權設置,來解決這個問題。
在第67行後面,也就是復制資源的後面增加下面一行
chmod 666 -R "$APP_ANDROID_ROOT"/assets就可以了。如下圖所示
第三步,創建工程復制批處理
在cocos2dx的2.2中,已經少了一些批處理來創建工程,現在全部改用python來創建工程。
現在到E:\cocos2dx\tools\project-creator下,創建一個批處理demo.bat,內容如下
python create_project.py -project %~n0% -package com.android.zdhsoft -language cpp
x ..\..\cocos2dx\platform\android\java\src\* ..\..\projects\%~n0%\proj.android\src /E
上面批處理的
第一行的意思是,建一個工程為%~n0%的工程,包名是com.android.zdhsoft,使用的語言是cpp。%~n0%在批處理表示的是 批處理的文件名,在demo.bat中,%~n0%的值是demo。使用該批處理的好處是,如果建議某一個工程,只有把批處理復制一個,然後重新命名就可 以了。如命名為sample.bat,執行後,就可以行到一個sample的cocos2dx工程。
創建的工程在E:\cocos2dx\projects目錄中。
第二行的意思,復制編譯andiroid工程需要的java文件。否則編譯的時候,會提示找不到對應的類。
『捌』 如何在Ubuntu下編譯生成自己創建的Cocos2dx項目
剛開始對makefile不熟悉,結果弄了好久才弄好,在這里記錄一下,順便也給那些有需要的人做一個參考,不要走太多的彎路。
首先運行create-android-project.sh創建一個新的項目,我比較喜歡把項目放在一起,比較好管理,所以我把新建的項目移動到當前用戶目錄下的Projects/Cocos2dx目錄下。
然後進入proj.Android/jni目錄下,打開Android.mk,修改如下:將:COCOS2DX_ROOT="$DIR/../.."
改為:COCOS2DX_ROOT="$DIR/../../../../cocos2d-x-2.1.5/" #相對於當前目錄的cocos2d-x的目錄,這是我的目錄
修改完成後保存以後就可以運行build_native.sh編譯Android下的項目了,如果提示NDK_ROOT沒有設置的話就使用export NDK_ROOT=(你的NDK的目錄,同樣也是相對於當前目錄的位置枯褲),例如我的是export NDK_ROOT = ../../../../Android/ndk-r9
如果想在Ubuntu下直接編譯運行的話,就按下面的方法:
先新建一個項目下新建一個文件夾proj.linux,然後在proj.linux下新建一個main.cpp文件,內容如下:#include"
../Classes/AppDelegate.h"#include"cocos2d.h"#include<stdlib.h#include<stdio.h#include<unistd.h#include<string
USING_NS_CC;intmain(intargc,
char**argv){AppDelegate app;CCEGLView*elgView =CCEGLView::sharedOpenGLView();elgView-setFrameSize(800,
480);returnCCApplication::sharedApplication()-run();}View Code這個代碼同樣,可以直接在例子中直接復制過來。
接著在proj.linux下新建一個Makefile,內容如下(也可以直接從cocos2d-x中的例子中復制一個過來,然後按自己的項差跡目修改):
EXECUTABLE =
newpathtest #要生成的目標的名字INCLUDES= -I.. -I../
ClassesSOURCES= main.
/Classes/AppDelegate.
/Classes/HelloWorldScene.
cppCOCOS_ROOT= ../../../../cocos2d-x-
2.1.5#相對於當前目錄的cocos2d-x的位置include $(COCOS_ROOT)
/cocos2dx/proj.linux/
cocos2dx.mkSHAREDLIBS+= -lcocos2d -
lcocosdenshionCOCOS_LIBS= $(LIB_DIR)/libcocos2d.so $(LIB_DIR)/
libcocosdenshion.soINCLUDES+= -I$(COCOS_ROOT)/CocosDenshion/虛敗並include
$(TARGET): $(OBJECTS) $(STATICLIBS) $(COCOS_LIBS) $(CORE_MAKEFILE_LIST)@mkdir-p $(@D)$(LOG_LINK)$(CXX) $(CXXFLAGS) $(OBJECTS)-o $@ $(SHAREDLIBS) $(STATICLIBS)$(OBJ_DIR)/%.o: %.
cpp$(CORE_MAKEFILE_LIST)@mkdir-p $(@D)$(LOG_CXX)$(CXX) $(CXXFLAGS) $(INCLUDES) $(DEFINES) $(VISIBILITY)-c $< -o $@$(OBJ_DIR)/%.o: ../%.
cpp$(CORE_MAKEFILE_LIST)@mkdir-p $(@D)$(LOG_CXX)$(CXX) $(CXXFLAGS) $(INCLUDES) $(DEFINES) $(VISIBILITY)
-c $< -o $@View Code最後在proj.linux目錄下執行命令: make DEBUG=1 all 即可。
當然,這些手動建造太麻煩,你也可以寫一個shell文件來處理。
『玖』 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, 哎,先將就著用吧。