cocos2d-x 一(跨平台编译)

移动应用编程我学得比较晚,这些天看了不少cocos2d-x的教程,趁着编译的空闲记录下学习过程和其中碰到的问题。

个人认为学习任何游戏框架和引擎都必需掌握的基础知识之一就是“跨平台编译”,这样就可以同时发布多个平台的应用,有利于推广。所以两天都没打代码,直接找教程学习cocos2d-x的跨平台编译方法及过程(网络上的资料包括编译时可能碰到的问题,大多很零散,所以这里整合一下)。

我自己的搭建的环境是VMWare9.0虚拟机+Mac+XCode,Win7+VS2010+eclipse+Cgywin+NDK,其中VS2010整合后可以正常使用cocos2d-x的核心功能,因为 编译生成各个库的时候没有碰到什么问题,只是生成project-Js时报了几个错误,不过我更喜欢用虚拟机运行Mac+XCode进行代码编写,感叹现在C++编程的效率被这些工具提升得很高啊……就连我这样的超级菜鸟都能感觉到……

虚拟机上安装Mac和XCode就不多说了,自己百度就能找到,唯一的一点就是vmware8.0只支持Mac10.7的安装,而9.0可以支持Mac10.8

cgywin+NDK的安装和配置稍微麻烦点,不过百度也可以查到很多教程,不过NDK的版本众多,有些版本并不能保证在自己电脑上运行和很正常,这时就可以换个版本,下面是google官方的NDK下载页面:

http://developer.android.com/tools/sdk/ndk/index.html#Installing

cocos2d-x用的是2.1.2,感觉Bug比先前用过的libgdx多很多啊,版本更新日程上排的密密麻麻的,不过这功能是比较全面,平台跨着方便,所以说是写2D游戏最佳的游戏框架也不为过了。安装过程同样就不重复叙述了,无论是在Mac上还是win上都有详细的安装教程,下面记录的就是ios和android跨平台编译的详细步骤:

首先,是在XCode上编写ios的工程,完成后在windows上用cocos2d-x的跨平台编译辅助工具新建一个android项目,到cocos2d-x的根目录下可以找到这个create-android-project.bat文件,首先要用记事本打开编辑三个参数:set _ANDROIDTOOLS=D:\android\android-sdk-windows\tools(android sdk tools的路径),set _CYGBIN(cgywin的bin路径)以及set _NDKROOT=D:\android-ndk-r8e(NDK的路径),也许你设置后打开时会看到什么“不是内部命令”之类的东西,其它的我不知道,我只知道我碰上的是文件有问题(虽然我下载下来从来没动过),但我还是用标准的书写格式重新替换了文件,然后就能工作正常了,改动后的文件内容如下:

@echo off
:: This script is used to create an android project.
:: You should modify _ANDROIDTOOLS _CYGBIN _NDKROOT to work under your environment.
:: Don't change it until you know what you do.


setlocal


:: Check if it was run under cocos2d-x root
if not exist "Í%\create-android-project.bat" echo Error!!! You should run it under cocos2dx root & pause & exit 2


if not exist "%~dpn0.sh" echo Script "%~dpn0.sh" not found & pause & exit 3


:: modify it to work under your environment  
set _CYGBIN=e:\cygwin\bin
if not exist "%_CYGBIN%" echo Couldn't find Cygwin at "%_CYGBIN%" & pause & exit 4


:: modify it to work under your environment
set _ANDROIDTOOLS=e:\android\android-sdk\tools
if not exist "%_ANDROIDTOOLS%" echo Couldn't find android sdk tools at "%_ANDROIDTOOLS%" & pause & exit 5


:: modify it to work under your environment
set _NDKROOT=e:\android\android-ndk-r8
if not exist "%_NDKROOT%" echo Couldn't find ndk at "%_NDKROOT%" & pause & exit 6


:: create android project
set /P _PACKAGEPATH=Please enter your package path. For example: org.cocos2dx.example:
set /P _PROJECTNAME=Please enter your project name:
if exist "Í%\%_PROJECTNAME%" echo "%_PROJECTNAME%" exists, please use another name & pause & exit 7
echo "Now cocos2d-x suppurts Android 2.1-update1, 2.2, 2.3 & 3.0"
echo "Other versions have not tested."
call "%_ANDROIDTOOLS%\android.bat" list targets
set /P _TARGETID=Please input target id:
set _PROJECTDIR=Í%\%_PROJECTNAME%


echo Create android project
mkdir %_PROJECTDIR%
echo Create Android project inside proj.android
call "%_ANDROIDTOOLS%\android.bat" create project -n %_PROJECTNAME% -t %_TARGETID% -k %_PACKAGEPATH% -a %_PROJECTNAME% -p %_PROJECTDIR%\proj.android
call "%_ANDROIDTOOLS%\android.bat" update project -l ../../cocos2dx/platform/android/java -p %_PROJECTDIR%\proj.android
:: Resolve ___.sh to /cygdrive based *nix path and store in %_CYGSCRIPT%
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%~dpn0.sh"') do set _CYGSCRIPT=%%A


:: Resolve current dir to cygwin path
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "Í%"') do set _CURRENTDIR=%%A


:: Resolve ndk dir to cygwin path
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%_NDKROOT%"') do set _NDKROOT=%%A
 
:: Throw away temporary env vars and invoke script, passing any args that were passed to us
endlocal & %_CYGBIN%\bash --login "%_CYGSCRIPT%" %_CURRENTDIR% %_PROJECTNAME% %_NDKROOT% %_PACKAGEPATH% "windows"


pause
正常运行后输入包名:com.xx.xx和工程名:xx,然后会列出安装的android SDK版本,选择支持的platform版本即可。我在这一步遇到的问题就是:cocos2d-x是放在中文目录下,在编译的最后一步会出错,这时将不会生成待会要用到的build_native.sh,也就无法进行从ios跨到android的编译……这一点在与VS2010整合时也应该注意……

在编译前,可以先解决一个问题,这是会在编译项目后会碰到的:具体请参考http://blog.163.com/zhoulong19880518@126/blog/static/6070970220132511558143/

经过上面一步后,会在cocos2d-x的根目录下生成对应项目名的目录,里面将包含三个文件夹,其中class和resouce就是用来存放C++文件和资源文件的,你可以在XCode编写的ios工程项目中找到这些文件,把它们copy到已经生成android工程项目的对应的目录中(也可以在Mac中打包上传到百度网盘,再在win下下载),然后打开cgywin的控制台,进入到已经生成工程项目的名为proj.android的目录下,再输入./build_native.sh,则编译开始……然后是个漫长的编译过程……

完成后将工程导入eclipse中,运行即可看到效果,不过一些人不能在模拟器上正常运行工程,看到如:No configs match configSpec,exceptionininitializererror这样的提示错误,所以还是进入真机测试吧。如果在编译时提示please define NDK_ROOT的话那就表示Cgywin中的NDK的设置不对,我这里碰到的问题是Cgywin中已经设置了NDK_ROOT,包括系统环境变量也设置了,但运行时依然出这个提示,后来发现设置系统环境变量名时用的是NDK,而不是NDK_ROOT,重新编辑下,再重启Cgywin控制台则可正常编译……VS20xx下的编译同样类似,只不过是直接把class和Resource里的文件Copy到对应的目录下就能直接用了。

 

 本系列转载来源 http://blog.csdn.net/cyistudio/article/details/8914483