题记:本人一直对游戏开发很有兴趣,只是一直缺乏一个良好的契机去认认真真地开发一个游戏。大四秋冬学期曾选了“计算机游戏程序设计”这门课,但由于9月底我开始准备14年考研,除了初期和大家讨论游戏设想,并没有太多参与我们团队的实际开发工作,而在项目进行到关键阶段的11月,我更是全身心投入考研备战中,无暇顾及项目开发。最后,从寻找素材,到Coding到美工,几乎所有的工作都是两个小伙伴帮我承担了。前后经历两个月的时间,他们完成了游戏的demo版本,尽管如此,老师还是给了个不错的成绩,由于课程的结束和毕设的忙碌,这个项目就一直被搁置着,直到本科毕业,两个小伙伴,一个直博一个工作,而我也如愿以偿,考研成功,留校读研。本学期的“高级操作系统”要求完成一个project,其中一个advise是完成一个安卓应用,于是我想到了去年此时的这个项目,秋学期相对轻松的课程安排,让我有时间延续当初未完成的工作。
本文记录我在Win7下搭建Cocos2d-x开发环境的过程,在记录自己足迹的同时,也希望藉此给后来者一些提示和帮助。本文分为两个部分,前半部分是win32环境下,Cocos2d-x开发环境搭建,组成部分是Visual Studio,Cocos2d-x和python;后半部分记录android交叉编译环境搭建,需要用到Eclipse,ADT,Android SDK和Cygwin,NDK,前三个可以独立构成android开发环境,后两个是连接win32与android编译环境的桥梁。
一、Cocos2d-x开发环境搭建(VS2010+ Cocos2d-x-2.2.5 + python-2.7.8)
为什么没选择最新的Cocos2d-x-3.x版本呢,是因为看到了Cocos引擎中文官网下载页面(http://cn.cocos2d-x.org/download/)上的一句话,担心3.x的版本不支持Cocos studio,于是还是选择了2.x稳定版本,同时我也下载了Cocos studio-1.5.0.1。
以上三个部件的安装步骤不是本文的重点,应该也没有什么困难的地方,就不再赘述,唯一要注意的大概是在windows环境变量中加入python根目录的路径,之后就能在cmd直接调用python程序而不需要每次cd到python安装路径了。
Cocos2d-x引擎允许编程人员用C++语言进行游戏开发,进入Cocos2d-x安装根目录,可以看到许多熟悉的后缀sln,这是VS工程的后缀名(马上反应过来,Cocos2d-x引擎其实是一个VS工程),双击打开cocos2d-win32.vc2010.sln,VS开始编译Cocos2d-x引擎工程,花了大约10分钟的时间(耐心等待),VS在cocos2d-x安装目录下产生了82M大小的sdf文件,Debug.win32和Release.win32文件夹。
VS编译完成后,可以在界面左侧的“解决方案资源管理器”中看到一个名为HelloCpp的项目(加粗显示,说明它是当前启动项目),启动项目的修改:在项目名上右击 -> 设为启动项目,当前启动项目是指VS运行编译时操作的对象。迫不及待地对HelloCpp CTRL+F5(执行不调试),接着就看到了一个带有Cocos2d-x图标的Hello World窗口。
到这里,win32下的cocos2d-x开发环境已经搭建完毕。
那么python做什么用呢?在刚开始建立编译环境的时候,我参考了许多网友的文章,其中提到cocos2d-x自带的installWizardForVS2010.js这个文件,用于在VS中安装项目模板(新建项目时,能直接建立Cocos2d项目),可是Cocos2d-x-2.2.5 安装目录下根本没有这样的文件啊。我很疑惑,又找了很多帖子,终于得知:Cocos2d-x从2.x的某版本之后,不再支持直接从VS环境建立Cocos2d-x新项目(大概是出于稳定性安全性的考虑?),而是推荐使用python命令建立新项目(很烦有木有,新建个项目还要用python指令)。我也看到一篇文章,作者copy了Cocos2d-x以前版本的installWizardForVS2010.js来强行安装项目模板,出于对Cocos开发团队的尊重,我没有采取强行安装的方法,按照他们推荐的来,总是不会出问题的,于是上python。
现在说说如何用python新建Cocos2d-x项目。之前如果你已经在环境变量中设置了python安装路径,那么应该就能在cmd中直接调用python执行python程序了。打开cmd,cd到如下路径:Cocos2d-x-2.2.5\tools\project-creator,里面有个create_project.py,这个就是用于新建Cocos2d-x项目的python程序了,不会用?在cmd中输入“python create_project.py”,或者用任何编辑器(记事本,notepad++,sublime等)打开,就会看到使用方法的指示。
好了,我们输入"python create_project.py -project HelloCC -package com.test.HelloCC -language cpp",创建一个HelloCC的项目,package参数请严格按照三层结构来,不然在之后的android项目导入上可能出现问题。创建完成后,可以在Cocos2d-x-2.2.5\projects目录下看到项目HelloCC的文件夹,该文件夹下是对应各平台的子项目,我们即将用到的是proj.win32和proj.android。进入proj.win32,发现有个HelloCC.vcxproj,它可以用于往VS中导入项目。
于是,在vs中,文件-> 添加-> 现有项目,浏览到刚创建的HelloCC文件夹中,选中HelloCC.vcxproj打开,可以在左侧的导航栏中看到导入的HelloCC项目,将它设为启动项目,编译运行。
二、android交叉编译环境搭建(Android SDK 4.3 r22.3 + Cygwin + android-ndk-r10b)
交叉编译环境的配置比较烦,这里给出各个软件的下载地址,以免在搭建过程中出现不必要的错误。
Cygwin的安装过程非常漫长,提醒大家,为节约时间,可以先进行Cygwin安装配置。
这里列出的几个部件和我在文章一开始列出的几个有所不同,这是因为现在google把Eclipse和Android SDK(Software Development Kit)集成在一起了,同时也带有ADT(Android Develop tools),只需要下载一个较新版本的SDK就可以。如果Eclipse中没有ADT,那么自行下载压缩包安装,或者在线更新,都是可以的,要注意的是ADT版本如果太新,比如23.0.0,那么SDK就必须同步到r23以上。
另外要提的一点,明明现在发布的NDK都已经自带windows下的编译功能(ndk-build.cmd),为什么还要使用Cygwin进行交叉编译。我尝试不使用Cygwin,将Cocos2d-x的proj.android项目导入Eclipse,右击项目 -> Android Tools-> Add Native Supporter,加入NDK编译支持,最后还是会报无法找到bash程序的错误,对于windows用户,这个bash.exe还是需要Cygwin来提供的。另外,即使在项目构建器中添加bash程序环境,最后生成的apk文件依旧是无法运行的。为什么呢?追踪到Cocos2d-x为我们生成的proj.android项目中,会看到一个build_native.sh的文件,这个文件是需要在Cygwin中手动执行的。
结论:NDK自带的交叉编译能力,不适用于Cocos2d-x生成的android项目,还是需要Cygwin帮助交叉编译。关于NDK自带的交叉编译如何用于一般项目的,具体操作方法,请参看此处(http://jingyan.baidu.com/article/3ea51489e7a9bd52e61bbac7.html)。
配置Java环境
配置Java环境这里再啰嗦一下,虽然是在Eclipse中运行java程序最基本的。JDK安装过程没什么可说,主要是环境变量的设置:
1、在PATH(没有请新建)中加入<Java安装路径>\jdk1.7.0_01\bin;
例如我的是“D:\Program_Files\Java\jdk1.7.0_01\bin;”(环境变量之间以分号分隔)。
2、新建JAVA_HOME,添加<Java安装路径>\jdk1.7.0_01\;
3、新建CLASSPATH,添加%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
配置Android SDK
这一步骤现在已经极大的简化了,因为新版本的SDK已经自带Eclipse,而且SDK内容也是安装好的,不需要再install了。需要注意的是,如果你没有follow我的下载地址,不小心从这里(http://developer.android.com/sdk/index.html)或者其他什么地方下载了20140702的版本,它只有API level 20的android环境,但是不包含arm内核img文件,于是在新建模拟器的时候会有这样的提示:No system images installed for this target.
这样的话,你需要手动添加它的img文件,或者添加其他API level的android版本,这里我提供后者的下载(http://pan.baidu.com/s/1pJkGhT5),请把文件解压后放入adt-bundle-windows-x86-20131030\sdk\platforms中。之后,打开SDK Manager.exe就能看到添加的版本了。
配置NDK
将NDK解压至适当路径,打开Eclipse,window-preference-Android-NDK,填写NDK Location,浏览至NDK的根目录即可,比如我的是:D:\Program_Files\eclipse\android-ndk-r10b\。
配置Cygwin
打开Cygwin安装文件setup-x86.exe,下一步,选择第一个install from internet,注意到第三个选项,install from local directory,因为下载部件的过程很长,记得将下载内容保存,下次如果还要安装,就可以选择该选项了;下一步,选择安装路径;下一步,设置下载部件的路径;下一步,direct connect;下一步,选择http://mirrors.163.com;下一步,将Devel的default改成install,开始下载,安装,我用2M的带宽,下载安装整个过程持续了两个多小时。
打开Cygwin Terminal,如果安装时没有生成桌面图标,可以在如下路径找到:Cygwin\bin\mintty.exe。Cygwin是一个模拟linux环境,指令基本一致,所以有linux开发经验的话,很容易上手。为验证Cygwin部件的正确安装,可以在terminal中输入make -v,gcc -v,g++ -v,如没有报错,则说明安装成功。
接下来,在Cygwin中配置NDK_ROOT路径,用notepad++等编辑器打开Cygwin\home\<你的用户名>\目录下的.bash_profile文件(如果没有,请从Cygwin\etc\defaults\etc\skel\中copy一份),在最后加入如下两行代码:
NDK_ROOT=/cygdrive/d/Program_Files/eclipse/android-ndk-r10b
export NDK_ROOT
NDK安装路径请按自己的写,注意斜杠方向。保存关闭.bash_profile,重启Cygwin,输入echo $NDK_ROOT,回车,如果正确显示NDK安装路径,说明操作成功。
接着,就可以对cocos2d-x生成的android项目进行生成了,在Cygwin中,输入
cd D:/Program_Files/Cocos2d-x-2.2.5/projects/HelloCC/proj.android
./build_native.sh
Cygwin开始用NDK对HelloCC进行本地编译。在编译的过程中,如果遇到了如下问题,请进入Cocos2d-x-2.2.5\extensions\CocoStudio\Reader\WidgetReader\LabelReader目录,在其中的LabelReader.cpp文件头部添加#include <algorithm>,保存关闭,再次运行./build_native.sh即可。
当看到如下画面,说明编译成功,可以关闭Cygwin了。
配置HelloCC项目
在导入项目前,首先把Cocos2d-x-2.2.5\cocos2dx\platform\android\java\src目录下的org文件copy至Cocos2d-x-2.2.5\projects\HelloCC\proj.android\src目录下。
接着,在Eclipse中导入HelloCC项目,File -> import -> Existing code into workspace,浏览至proj.android文件夹下,finish。
配置项目的具体过程,我基本参考了网友leinchu的博客,请看这里(http://blog.csdn.net/leinchu/article/details/21631463)。
在左侧的资源管理器中,右击项目,Properties -> Builders -> New -> Program,创建一个名为Native_Builder的本地生成器,
Name:Native_Builder
Location:D:\Program_Files\Cygwin\bin\bash.exe
Working Directory:D:\Program_Files\Cygwin\bin
Arguments:--login -c "cd /cygdrive/d/Program_Files/eclipse/android-ndk-r10b && make APP=HelloCC"
注意Arguments中路径的斜杠写法。
然后选择C/C++ Build -> Environment-> Add,在Name栏输入PATH,在Value栏输入D:\Program_Files\Cygwin\bin,如下图,前面的内容是Eclipse自动从环境变量PATH中提取加上的。
在Java Build Path里面选择Libraries栏,将Android Dependencies以及Android Private Libraries两个library删掉。
至此,Cygwin交叉编译环境已经配置到当前项目中了,Eclipse在编译HelloCC时,将利用Cygwin的交叉编译能力,生成java code和我们需要的apk文件。需要注意的是,项目配置需要在每次新建的项目中完整的操作一遍。
在运行之前,我们需要先配置一个虚拟机(虽然最后的apk我并不通过Eclipse的android虚拟机调试,但是不配置虚拟机会导致运行失败),点击菜单栏的Android virtual device manager——一个安卓手机图标,从device definition中选择内存需求最小的nexus s,Create AVD,选择一下Skin,点击ok。可以在android virtual devices中看到已经创建的虚拟机。
现在,我们可以运行HelloCC了,右击项目,run as -> android application。之后,虚拟机启动,Eclipse会往虚拟机中安装HelloCC.apk,然后运行,这里因为屏幕分辨率的关系,在虚拟机中运行HelloCC会闪退,我在BlueStacks和自己的android平板上均能运行正常。生成HelloCC.apk在\proj.android\bin目录下,大小为2701kb,如果生成出来apk只有几十k,那就说明生成失败了,请检查以上步骤是否遗漏,重新进行配置。如果你看到如下画面,那么恭喜你,android交叉编译环境已经成功建立,你可以将Cocos2d-x的项目通过Eclipse编译,然后安装在真机上测试了。
references:
cocos2d-x windows开发环境配置from leinchu:http://blog.csdn.net/leinchu/article/details/21631463
cocos2d-x 安卓环境配置:http://www.cnblogs.com/sanjin/p/3275350.html
win32和android 的cocos2dx环境搭建详细教程:http://blog.csdn.net/aa4790139/article/details/8086635
Cocos2d-x v2.2.2版本+Win7+VS2010环境搭建:http://www.cnblogs.com/linji/p/3599478.html