不用vs和cygwin!Eclipse+cdt实现cocos2dx跨平台解决方案(Android版)

cocos2d-x因为其良好的跨平台解决方案而受到开发者的追捧。我们公司以前开发ios使用的是cocos2d-iphone,考虑到未来向android的移植,决定尝试使用cocos2d-x

 

cocos2d-x官方给出的解决方案是使用vs开发,但是看了一下,好像很麻烦啊……当需要移植到android的时候还要用类似cygwin这样的工具来模拟unix系统,然后修改配置文件还得要会改.shunix批处理文件,而且最终,还是要使用eclipse来运行和调试android版本。

 

对于做java出身,只熟悉Eclipse不熟悉VS,只熟悉msdos不熟悉unix,只会写bat不会写sh的我来说这是灾难啊……

 

对于只有AMD2.3Gcpu2G内存还要分一些出去当显存,同时打开vs2008Eclipse3.7就会像随时都会爆炸的电脑来说这也是灾难啊……

 

有没有理法可以直接用一个eclipse就全搞定呢?

 

反正至今为止我还没google出来,也许因为最近召开党的斯巴达所以某些结果无法显示?

 

但其实是有理法的。

 

虽然不算完美解决,但总算看到一线曙光,如果有读者看了以后觉得有用,就帮忙扩散一下吧,有兴趣的可以加我的微博@yanjie_sheng 一起讨论。

 

/****************************我是分割线*******************************/

 

 

一、环境

我只是尝试了Android平台,但因为保持了官方跨平台解决方案的文件夹结构,所以理论上各平台都应该是没问题的。

 

1.1Eclipse+CDT

首先确保你的Eclipse正确安装了CDT插件,这样你才能编辑和创建C++工程,有关Eclipse+CDT的环境配置,请自行google

版本……不知道有没有影响,我的Eclipse3.7 IndigoCDT8.0.2

 

1.2Cocos2d-x

这个……必须的。

http://cn.cocos2d-x.org官网下载,建议cocos2d-2.0-x-2.0.3,这样稍后的例子你的会跟本文介绍的一样。

 

1.3Android SDK / ADT

既然想用eclipse,应该是想做Android平台吧,那么请正确安装Android SDKADT

只要开发Android项目,无论是否使用cocos2d-x引擎这都是必需的。也请自行google

 

1.4Android NDK

这是AndroidC++交叉编译器,如果要做Android版本也是必须的。官网下载,r8或以上版本。

 

1.5Microsoft Visual Studio 2008或更高版本 (可选项)

这个只是因为如果你想生成win32版本的话就必须要vc++的编译器,如果不需要win32版本只要Android就不用装了。

(什么?你问我既然可以直接开发Android版本为什么还要win32版?这个我也不知道,也许是为做个pc上的demo给投资方演示?)

 

二、解决方案概述

 

这一章的目的是让你了解cocos2d-x跨平台的基本思路和项目结构,如果你已经有所了解或者急于创建Eclipse下的工程,你可以跳过这一章。

 

 

 

2.1 目录结构

 

下载并解压cocos2dx,你可以在\cocos2d-2.0-x-2.0.3\samples目录下看到一些例子:

 

<IGNORE_JS_OP>

 

 

 

 

HelloCpp为例,这个文件夹下包含下面这些文件夹:

 

<IGNORE_JS_OP>

 

 

 

 

其中:

 

\HelloCpp\Classes

 

\HelloCpp\Resources

 

\HelloCpp\proj.XXXXX 是各平台版本对应的工程文件夹,可以供相应的开发环境直接使用。

 

也就是说,我们将代码放在Classes文件夹下,资源放在Resources文件夹下,然后使用Eclipse/Xcode等开发环境在对应版本的工程中通过调用它们来运行和调试。

 

 

 

2.2 基于vs的解决方案

 

vs中通过打开cocos2d-2.0-x-2.0.3\cocos2d-win32.vc20XX.sln创建的工程直接就包含了下面的结构:

 

<IGNORE_JS_OP>

 

 

 

 

仍以HelloCpp为例,你可以直接在\HelloCpp\Classes文件夹下编写C++代码并通过win32版本运行调试:

 

<IGNORE_JS_OP>

 

 

 



2.3 基于Eclipse的解决方案

 

上一小节简单提到的内容可以在官网http://cocos2d.cocoachina.com/resource 中的教程第一章中找到更详细的说明,这是因为vs是官方推荐的windows下的开发环境。如果你使用vs,那么有关跨平台的一切几乎都由cocos2d-x帮你解决好了:自动生成项目、自动包含lib

 

下文将要介绍的基于Eclipse的解决方案并没有那么方便,很多时候都需要手动来进行处理。我很希望cocos2d-x开发组能够考虑一下是否将Eclipse纳入标准环境从而在将来将其改善得更为自动化一些,这也是发表本文的主要目的之一。

 

三、Eclipse + Cocos2d-x

终于到了最关键的一章,也许你会发现,原来这么简单——甚至比使用vs还要简单。当然,除了一些需要手动操作的部分之外。

 


3.1 建立C++工程

如果你的Eclipse正确安装了CDT,你应该可以进行下面的操作,否则请参看1.1小节并自行google

启动Eclipse -> File -> New -> Project… -> C/C++ -> C++ Project

<IGNORE_JS_OP>

 

Next >:

<IGNORE_JS_OP>

 

选择Empty ProjectToolchains选择Microsoft Visual C++,起个名字叫HelloCppFinish


这样你就得到了一个基于ms vc++编译器的空的C++工程HelloCpp

 


3.2 创建cocos2d-x跨平台目录结构

手动的将\cocos2d-2.0-x-2.0.3\samples\HelloCpp目录下的全部文件夹考到你的这个项目下:

<IGNORE_JS_OP>

 

这样你就有了一个跟标准cocos2d-x一样的目录结构。

 


3.3 加入lib

右键点击HelloCpp工程,选择Properties -> C/C++ General -> Paths And Symbols

<IGNORE_JS_OP>

 

右边的Includes标签下Languages应该有3个,不同Eclipse版本可能名字显示不同,无所谓,随便点选其中一个,Add

<IGNORE_JS_OP>

 

Directory里面输入\cocos2d-2.0-x-2.0.3\cocos2dx所在的路径,当然你也可以在File system里面找。

注意下面有两个选项:Add to all configurationsAdd to all languages,都勾上。OK

<IGNORE_JS_OP>

 

然后继续Add,用同样的方式添加下面两个目录所在的路径:

\cocos2d-2.0-x-2.0.3\cocos2dx\include

\cocos2d-2.0-x-2.0.3\cocos2dx\platform\win32

注意都要勾选那两个选项。Apply -> OK

 


3.4 建立Android工程

如果你的Eclipse正确安装了Android SDKADT,你应该可以进行下面的操作,否则请参看1.3小节并自行google

选择EclipseFile -> New -> Project… -> Android -> Android Project from Existing Code

<IGNORE_JS_OP>

 

Next >:

<IGNORE_JS_OP>

 

Root Directory里面,选择你worckspace里面,刚才建立的那个C++工程HelloCpp文件夹下面的proj.androidFinish

<IGNORE_JS_OP>

 



3.5 建立cocos2d-x Android lib工程

上一节建立的工程会显示有错误,原因是没有导入cocos2d-xlib

再次选择EclipseFile -> New -> Project… -> Android -> Android Project from Existing Code,这一次在Root Directory里面,选择\cocos2d-2.0-x-2.0.3\cocos2dx\platform\android\java所在的路径::

<IGNORE_JS_OP>

 

Finish

这样你就有了一个cocos2d-xAndroidlib工程。

(顺便说一下,这个工程名字应该叫作libcocos2dx,但是不知道什么原因,我建出来的名字叫java……)

 


3.6 加入cocos2d-x Android lib

右键点击org.cocos2dx.hellocpp.HelloCpp工程,选择Properties -> Android:

<IGNORE_JS_OP>

 

如果右下方你的Library列表里有个项目前面有个红叉,选中,Remove。然后Add:

<IGNORE_JS_OP>

 

里面的列表会有刚才创建的libcocos2dx(我这里叫做javalib工程。OK

<IGNORE_JS_OP>

 

这个时候org.cocos2dx.hellocpp.HelloCpp工程没有错误了。

 


3.7 创建你自己的jni Builder

如果你正确下载并解压了Android NDK,你应该可以进行下面的操作,否则请参看1.4小节并自行google

右键点击org.cocos2dx.hellocpp.HelloCpp工程,选择Properties -> Builders:

<IGNORE_JS_OP>

 

如果你看到右边最上方那个带着蚂蚁图标的New Builder (1),选中,Remove。然后New

<IGNORE_JS_OP>

 

ProgramOK


Main标签下:

LocationBrowse File System中选择\android-ndk-r8b\ndk-build.cmd

Working DirectoryBrowse Workspace中选择Android 项目org.cocos2dx.hellocpp.HelloCpp

<IGNORE_JS_OP>

 


Refresh标签页下,第一个勾选上:

<IGNORE_JS_OP>

 


Environment标签页下,按New

NameNDK_MODULE_PATH

Value

x:\xxx\cocos2d-2.0-x-2.0.3;x:\xxx\cocos2d-2.0-x-2.0.3\cocos2dx\platform\third_party\android\prebuilt (其中x:\xxx是你cocos2d-2.0-x-2.0.3存放的位置),OK

<IGNORE_JS_OP>

 


Build Option标签页下,勾选During auto buildsSpecify working set of relevant resources

<IGNORE_JS_OP>

 

然后按Specify Resources,在org.cocos2dx.hellocpp.HelloCpp下的jni目录前打勾:

<IGNORE_JS_OP>

 

FinishApplyOKOK

 
 
 

 

四、如何使用

 

如果你顺利的进行了第三章所述的所有操作,你的跨平台环境已经完成了。但如果你仍然不知道该如何编写cocos2d-x代码并在Android设备上运行和调试,请继续向下看。

 

 

 

4.1 编写C++代码

 

经过上一章的操作之后,你的Eclipse里应该有了3个新的工程:

 

HelloCpp: 这是一个C++工程

 

libcocos2dx(我的叫做java: 这是一个cocos2dxAndroid版本lib工程

 

org.cocos2dx.hellocpp.HelloCpp: 这是一个Android工程

 

<IGNORE_JS_OP>

 

 

 

 

遵照cocos2d-x的跨平台解决方案,我们应该在HelloCpp工程的Classes下编写C++程序,HelloCpp工程自带了两个类:AppDelegateHelloWorldScene。你可以增加更多你自己的类。

 

 

 

4.2 运行Android项目

 

如果你已经在HelloCpp工程中编写了一些C++程序而急于想在Android设备上看到效果的话,你不应该编译和运行HelloCpp工程,而应该直接运行org.cocos2dx.hellocpp.HelloCpp工程。

 

但在运行之前,仍然需要我们手动的将HelloCpp 工程下的\HelloCpp\Resources目录下的所有资源文件都考到org.cocos2dx.hellocpp.HelloCpp工程的assets文件夹下。(或许将来有谁帮忙写个windows下的批处理来做这件事?)

 

在本例中,就是iphoneiphonehd文件夹:

 

<IGNORE_JS_OP>

 

 

 

 

然后选中org.cocos2dx.hellocpp.HelloCpp工程,点EclipseProject-> Build Project:

 

<IGNORE_JS_OP>

 

 

 

 

第一次build的时候会很慢,因为要把整个cocos2d-xlib都编译一遍,以后就不会这么慢了。编译完成的话在Console窗口应该能看到下面的输出:

 

<IGNORE_JS_OP>

 

 

 

 

这个时候libhellocpp.so已经生成了,接下来就可以在你的Android设备上运行你的org.cocos2dx.hellocpp.HelloCpp工程了!

 

(特别注意的一点是:好像模拟器对于openGLES的支持有问题,如果用模拟器运行这个例子的话会报错)

 

 

 

4.3win32版本(可选项)

 

你也许还记得1.5小节中的可选项:安装vs2008。如果你进行了这一步,那么你还可以使用vc++的编译器在win32环境下编译和运行你的HelloCpp工程。

 

据说cocos2dx自带的模拟器也挺不错,不过因为我没有做这一步,所以我也不知道实际效果是什么,而且你也不要指望我会在本文中给你攻略。

 

五、后记

 

5.1 为什么要用Eclipse

 

也许有人会问,既然已经有了vs的一整套解决方案,并且自动化程度非常高,为什么还要使用包含这么多手动操作的Eclipse环境呢?

 

呃……我想原因主要是如下3点吧:

 

1、  不用在两个很占资源的IDE之间切来切去就可以直接看到android上的效果。

 

2、  如果你的android版本需要增加一些第3方的广告或者付费插件(一般都是jar的lib包),你用vs的win32版本是无能为力的。

 

3、  对于那些和我一样不熟悉unix和vs的人来说,不用学习unix和.sh文件写法,不用熟悉一个新的IDE

 

5.2 为什么要把C++工程和Android工程分开

 

1、保持cocos2dx官方解决方案的文件夹结构,你只需要在C++工程里编辑proj.android外面那个Classes里的代码,不用去修改目录结构。

 

2、如果直接在android工程里编辑C++代码,好像自动完成什么的会出不来。

 

相较于vs的工程,相当于是把vs里面那个win32工程直接搬到Eclipse里面了,只是不装vs的话不能运行win32版本而已。

 

 

你可能感兴趣的:(cocos2dx)