cocos2dx-x3.0的正式版出来也有一段时间了,现在最新的版本是到了3.2alpha,和2.x系列相比,能够找到的相关资料除了官网上的wiki,其他的也不见得多,遇到的一些和2.x的差异和问题在这里记录下来备忘。
和2.x的shell脚本相比,3.x系列的配置全部python化了,最大的好处当然是跨平台,在windows下面也可以脱离cywin进行android版本的编译,虽然ios版本还是离不开xcode,但是可以mac和win分别编译不同版本的感觉还是不错的,省时省力。
先从python开始,在3.x的lua项目中除了android版本的编译,还有一个更重要的部分是lua-binding的生成,与2.x要在tolua++中手写.pkg文件不同,3.x所采用的bindings-generator(位于cocos2d-x/tools下)基本上是全自动解析的,自己新加入的一些需要绑定的cpp类只需要添加(独立于cocos2d-x模块外的部分)或修改(修改cocos2d-x自身)一下cocos2d-x/tools/下的ini文件即可,确实方便了不少,但是相对的配置的麻烦也出来了。
想要通过执行cocos2d-x/tools/tolua/下的genbindings.py来生成对应的绑定文件(位于cocos2d-xcocosscriptinglua-bindingsauto,也可以通过修改genbindings.py文件来生成到不同路径下),就得先准备好python,python的两个插件,ndk。这里的python也可以用于3.x项目文件的生成以及android版本的编译,项目生成在后面再说,虽然有些因果倒置,但是还是提前从这里入手。
在cocos2d-x ools olua下面的README.mdown以及官网的wiki上有记载怎么样安装,这里单独说一下windows版的配置,就windows版需要手动diy的部分比较多:
1.readme中说需要的是ndk:android-ndk-r9b,现在官网最新的版本是android-ndk-r9d,建议用最新版本,根据操作系统选择32位或64位的版本,要和后面的adt和jdk保持一致,但是如果用r9c和r9d的话,需要将tolua下的ini里面的android_headers中的4.7改为4.8,这也就是为什么readme中要求用r9b的原因,(另外提一句如果用r9c在生成的时候还会出错,需要根据报错的地方修改ndk中对应的math.h文件注释掉出错的那一行),下好后解压,然后将解压的路径新增到环境变量的NDK_ROOT中
2.安装python, (32bit) from (http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi). 这个就严格按照要求来,注意是32位版本的,64位版本的装不了所需的两个插件。装好后将python的安装路径加到环境变量PATH里,重开cmd命令行输入python看看有没有即可验证。接着装pyyaml: http://pyyaml.org/download/pyyaml/PyYAML-3.10.win32-py2.7.exe 以及pyCheetah :https://raw.github.com/dumganhar/cocos2d-x/download/downloads/Cheetah.zip, 下下来解压到 python路径的“Python27Libsite-packages”里
这样一来就万事俱备了,在cmd的tolua路径下运行python genbindings.py,然后就可以生成lua绑定了。
说完这个,回到开始的项目配置,python这个主角已经装好了,ndk也入住了,要通过cocos2d-x下面的setup.py生成新项目还需要一些其他的东西,基本都是用来编译android项目的:
adt:Android Development Tools,注意32位还是64位的版本,和ndk以及jdk保持一致,这个决定了android的api level,可以通过附带的skdmanager来下载不同版本android的api用于编译。下载好后解压,然后在环境变量中新增ANDROID_SDK_ROOT指向此路径下的sdk目录。以后可以用这个里面的eclipse来debug生成的android项目
jdk:Java SE Development Kit,依然注意32位还是64位版本,和ndk以及adt保持一致,一定是jdk,仅有jre是不行的。下载好后安装,安装完成后在环境变量中新增JAVA_HOME指向此路径,可以在cmd中输入java和javac都能有输出来验证
ant:Apache Ant,用于辅佐编译android项目(Apache Ant is a Java library and command-line tool that help building software),下载好后加压,在环境变量中新增ANT_ROOT指向此路径下的bin目录,然后再加入PATH中,可以在cmd中输入ant验证
最后,添加一个环境变量COCOS_CONSOLE_ROOT指向“cocos2d-x-3.x oolscocos2d-consolein”这个路径,然后就可以在cmd中到cocos2d-x-3.x的路劲中运行python setup.py。这样一切都搞定了(?),在cmd中运行cocos,可以创建项目,编译项目等等一条龙服务。创建一个新项目:cocos new MyGame -p com.MyCompany.MyGame -l lua -d ./MyCompany ,-p后面接的是android的包名, -l可以选择cpp或者lua,-d就是目录了,这样实际上是根据不同的项目模板(cocos3.x/tests下面)来生成新的工程配置文件。
生成之后cmd进入该目录,可以输入cocos compile -h看看编译的参数表,3.2alpha新增了不少选项,有待尝试。-p android可以生成android项目,--ap 后面的参数就是adt里android的api level,还有一个比较有用的--ndk-mode,除了debug和release以外还可以选择clean作为参数重新编译项目。
cocos这个命令所用到的python文件都在cocos2d-x-3.x oolscocos2d-console下面,编译android的在plugin目录下的project_compile/build_android.py。如果要添加其他需要编译的路径(比如说自己要用的cpp库),修改project-android下的build-cfg.json文件,加入新的路径到ndk-module-path中,注意相对路径
相比cocos2d-x-2.x那个windows系统需要在cywin下运行的build_native.sh来编译android工程,新的基于python的配置文件要更加自动化,脚本化一些,虽然在最开始也感觉这个cocos命令一下集成了许多的功能让人不知道从何下手,还不如2.x时候一个文件来得直接(3.x也可以一个文件,就是build_android.py来搞定,稍加配置然后python build_android.py -p apilevel myGame即可),但是经过一段时间的使用,无论从lua的绑定还是自动编译的过程而言,3.x这套脚本配置确实要进化了很多,当然,3.x相对于2.x进化的不只是在这方面,还有许多新的feature(坑)加入,这个请听下回分解。