Cocos2d-x Windows 7配置备忘

Cocos2d-x在Windows下配置起来确实问题较多,但我找到的几篇文章都很给力,虽然花费了一些力气,但总算成功了。

我的环境

  • Cocos2d-x-2.1.4
  • android-ndk-r8e-windows-x86_64
  • JDK 1.7
  • eclipse 4.2.0 with CDT/ADT

参考文章

这篇文章基于cygwin来配置,文章非常详细,熟悉cygwin的人基本上可以一次成功:

How to set up the Android Cocos2d-x development environment on Windows 7

这篇文章基于NDK来配置,不需要cygwin支持(下文简称为ndk only)。文章很详细,但有些细节没有说得太清楚,对于不熟悉eclipse的人来说可能会比较纠结。另外,该文较老,其中关于JDK必须使用1.6版本的说法已经过时:

让人死去活来的cocos2d-x安卓开发环境搭建

易出错点

由于上面两篇文章都很不错,我这里就不再复述过程,只说一下我在配置过程中碰到的几个纠结的地方。配置成功以能运行HelloCpp/proj.android项目为准。

要看下面的内容,必须先看完上面两篇文章,否则等于白看。

1. Library错误

导入HelloCpp项目后,在 “项目属性-Java Build Path-source” 中加入cocos2d-x-2.1.4\cocos2dx\platform\android\java 路径。然后进入“项目属性-Android-Library”,删除这里的“Reference Project”,否则怎么编译都会报错。cygwin环境和ndk only环境均会出现。切记切记!

2. NDK_MODULE_PATH 环境变量配置

具体的路径可以查看 cocos2d-x-2.1.4\samples\Cpp\HelloCpp\proj.android\build_native.sh 的最后几行。cygwin环境不需要设置这个变量,直接执行 build_native.sh 即可。

这个环境变量可以配置在Windows系统环境变量中,也可以配置在Eclipse项目的builder属性中,还可以直接配置在 project/jni/Application.mk 文件中。

若配置在 Application.mk 文件中,可以这样写: NDK_MODULE_PATH:=cocos2d-x-2.1.4;cocos2d-x-2.1.4\cocos2dx\platform\third_party\android\prebuilt

3. Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)

apk打包成功,安装执行后出现这个错误退出。这一般是由于C++编译失败造成。对于cygwin环境,再执行 build_native.sh 编译一次即可成功;对于ndk only环境,也需要重新执行一次编译(如果没有配置自动刷新,那么可以手动选择Run-build project)。

4. 建立自定义builder的问题

死去活来 和网上其他文章都提到为了不依赖cygwin,需要在 “项目属性-Builders”中建立一个新的buildr,调用NDK提供的 ndk-build.cmd来编译。这样做有2个问题:

  1. 没有强调 Builder 的编译顺序。默认新建的Builder是处于所有已有Builder的末尾,这可能会导致 Android Package Builder 等 Builder依赖错误;
  2. 默认存在的 “CDT Builder” 依然是调用 bash build_native.sh 来编译,若没有安装cygwin,可能会出现下面的错误:

bash D:/cocos2d-x/cocos2d-x-2.1.4/samples/Cpp/HelloCpp/proj.android/build_native.sh clean Cannot run program "bash": Launching failed Error: Program "bash" not found in PATH

我认为正确的做法是,不必新建一个Builder,而是调整现有的Builder的属性:

  1. 调整 “项目属性-C/C++ Builder” 选项,将 “Build command” 的值从原来的 bash ${ProjDirPath}/build_native.sh 设置为 x:\android-ndk-r8e\ndk-build.cmd
  2. 调整 “项目属性-C/C++ builder-Environment” 选项,加入 NDK_MODULE_PATH 环境变量,其值与上面介绍的相同。