cocos2dx 是目前出现在大众视野中主流的可移植框架. 可以把c++编写的程序移植到各个目标平台. 如果你想搭建一个 anroid ndk + coco2dx + eclipse 的开发环境, 相信下面的内容讲会帮到你
网络上很多在window下面配置c++ eclipse 开发环境的帖子, 基本是泛泛而谈, 一旦出错, 无法修复. 如果你人品不好, 配置的 cygwin 编译环境死活不能运行, 根本找不到错误. 而且即便在一台机器上配置好, 在另外的机器上如果需要搭建环境, 重复劳动不说, 错误还是有可能重复出现, 最终你面临的就是细节细节, 耗费你太多开发的热情.
下面我介绍一种靠谱的解决方法
1 下载 cocos2d-1.0.1-x-0.13.0-beta, cocos2dx 1.0 的两个版本区别不大
2 修改解压目录下的 create-android-project.bat 或者是 create-android-project.sh, 修改其中的 "%_ANDROIDTOOLS%" _CYGBIN, 这里我建议在使用 linux shell 来建立 android 项目.
3 运行 create-android-project.bat 按照提示输入包和项目名字后会在 cocos2d-1.0.1-x-0.13.0-beta 目录下产生新的eclipse项目.
4 打开 eclipse 导入新 android 项目.
5 下面和其他文章不同, 其他文章会建议你把刚才导入的 android 项目转化为 c++ 项目, 然后增加 NDK builder 来编译c++代码.
也就是其他帖子是建议你使用使用一个项目来进行 ndk 的开发, 这个项目是 c++ 项目, 同时也是 android 项目.
我对这样的方式不太认同, 我推荐通过文件夹共享的方式来进行开发, 建立一个c++项目来开发 android 的 c++ 部分, 然后再建立一个 android 项目, 里面只有一个 main.cpp, c++ 项目修改时, 通过运行下面的脚本来更新 android 项目下面的 so 文件. 这样 android 项目就相对独立, 不会因为 c++ include 的一点语法错误而不能编译了. 另外的一个好处是 c++项目可以使用其他的开发工具开发, 而android 项目不受影响. 例如你可以使用 vs 来写c++, 通过脚本更新 android 中的 so 文件, 这样android 项目永远都是好的, 不需要考虑eclipse编译 c++ 的各种问题.
<project name="precompile" default="build">
<property name="projectdir" value="D:/your/android/project/root/dir" />
<property name="ndk_root" value="D:/android-ndk-r8b" />
<property name="cocos2dx_root" value="D:/cocos2d-1.0.1-x-0.13.0-beta" />
<property name="sep" value=";" />
<property name="NDK_MODULE_PATH" value="${ndk_root}${sep}${cocos2dx_root}${sep}${cocos2dx_root}/cocos2dx/platform/third_party/android/prebuilt" />
<target name="build">
<exec command="${ndk_root}/ndk-build.cmd">
<arg line="-C ${projectdir}" />
<arg line="NDK_MODULE_PATH=${NDK_MODULE_PATH}" />
<arg line="NDK_LOG=1" />
<arg line="V=1" />
</exec>
</target>
</project>
运行这个脚本就可以调用 ndk 来编译c++代码为so了. 无需外部编译环境.
6 在 android 项目的的父文件夹(里面还有 Classes 文件夹的那个目录) 中建立一个 eclipse c++ 项目来编辑 c++ 代码. 这里只是借用了 eclipse 良好的图形界面来编辑c++代码, 却并不指望 eclipse 可以正确的运行代码. c++ 文件编辑完成后调用 ant 可以把代码编译成 so 在手机上运行.
anroid ndk 项目调试比较繁琐, 一旦崩溃很难找到错误. 所以你还需要一个本地测试环境, 也就是 c++ application. coco2dx 提供了 linux 和 windows 下面建立桌面编译环境的方式. linux 操作系统下, cocos2d-1.0.1-x-0.13.0-beta 中含有 proj.linux,按照官方的说明导入, 如果人品好就可以启动 linux 下的 cocos2dx 程序了. 如果不行失败, 那么还有一种解决方法就是 使用 visual studio 导入 cocos2d-1.0.1-x-0.13.0-beta 自带的 vs project, 很简单的几个步骤就能在 windows 下面启动桌面测试程序了. 我就是这样.
到这里, 你已经对怎样建立一个 cpp 项目, 在自己的桌面上运行, 然后在 android 上编译为 so 有了很多了解, 如果运气好, 应该跑通了.
下面附送一段扫描 java代码并且生成 android.mk 文件中src include路径的代码. 在你增删 cpp文件后常需要修改 Android.mk, 这个过程很是痛苦.
package com.hurry07.includecpp;
import java.io.File;
public class CppIncludePathPrint {
static int filecount;
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("LOCAL_SRC_FILES := youprojectname/main.cpp\\\n");
output(new File("D:/cocos2d-1.0.1-x-0.13.0-beta/youprojectname/Classes"), "\t../../", sb);
System.out.println(sb);
}
private static void output(File file, String prefix, StringBuffer sb) {
if (file.isFile()) {
if (file.getName().endsWith(".h")) {
return;
}
if (filecount > 0) {
sb.append('\\');
sb.append('\n');
}
filecount++;
sb.append(prefix);
sb.append(file.getName());
} else if (file.isDirectory()) {
prefix += file.getName() + "/";
File[] subfile = file.listFiles();
for (int i = 0; i < subfile.length; i++) {
output(subfile[i], prefix, sb);
}
}
}
}
如果可以使用 linux , 我建议在linux下面开发android ndk 项目. linux 下配置 eclipse c++ tool chain 非常容易, 只要点选一下即可. 另外 eclipse 4.2 中支持 c++ project -> makefile project -> android 这种类型, 使用它建立 c++ project 以后, 只要 ndk-build 可以运行, 那么 eclipse 可以自动识别你所有依赖的 android 或者是 cocos2dx modual 的inclue 路径, c++项目路径设置变得非常容易.
mac 上使用 xcode 来开发 c++ 然后移植到 android 上也是一个方案, mac 按照官方的文档很简单就能建立 cocos2dx 项目, 基本不需要拼人品. mac 对开发人员才是最靠谱的啊.
一切都建立在一个良好人品的基础上, Good Lock