摘要
1、面临问题:调用的入口、脚本的解析器、cocos2dx源代码、脚本的扩展类等等均是由C/C++实现,但是安卓工程无法编译C/C++代码
2、解决办法:将以上由C/C++实现的部分编译成*.so库,在安卓工程中对库进行启动调用
搭建Android环境
1、安装Java JDK 和 Eclipse IDE
2、安装Android SDK
3、安装ADT(Android Development Tools)
4、安装NDK
5、安装Cygwin
6、安装Cocos2d-x
(以上见http://www.cnblogs.com/graphicsme/archive/2012/11/06/2756914.html)
创建Android工程
7、修改Cocos2D安装目录下的“create-android-project.bat”文件。将_CYGBIN、_ANDROIDTOOLS、_NDKROOT三个分别设置成Cygwin的bin目 录(c:\cygwin\bin)、Android SDK的tools目录、NDK根目录。
---注意:路径不可以含中文字符
8、运行“create-android-project.bat”生成android工程,依次按要求输入,最终在Cocos2D的根目录下会产生所输入的项目名称的文件夹(工程名假设为ABC)
---注意:输入包路径的时候必须按照xx.xx.xx的格式,否则会报错
9、将ABC工程的cpp和h代码拷贝到Classes中,将资源和脚本文件拷贝到Resources中
10、由于我们要将cocos2dx的实现源代码全部打包到so中,那就需要对makefile文件进行修改:打开/proj.android/jni/Android.mk。
11、关键字LOCAL_SRC_FILES,这个关键定义了需要打包到so中的.c和.cpp文件(不包含.h文件)。我们需要手动添加的内容包括:程序的入口AppDelegate.cpp、解析器、扩展文 件。可能你会问为什么没有对Cocos2dx的代码进行打包呢?!继续向下看你会找到答案。
12、关键字LOCAL_C_INCLUDES,这个关键字定义了包含的头文件位置,精确到文件夹就可以
13、makefile文件的最后几行是$(call import-module,XXX),这是加载了XXX位置的makefile文件,这就是我们为什么不用对Cocos2dx代码进行手动打包的原因,因为coco2dx文件 中提供了makefile文件,只要通过本个文件对其调用即可完成对cocos2dx代码的打包。
14、完成对Android.mk文件的修改之后,运行bash build_native.sh即可完成so文件的生成。
15、打开配置好的eclipse导入存在的安卓工程即可
可能遇到的问题总结
1、找不到某个头文件
打开Android.mk文件找到LOCAL_C_INCLUDES,将头文件所在的文件夹进行添加即可,路径是相对于修改的mk文件
2、某某某函数undefined
这是由于只包含的函数的头文件而没有对实现文件进行包含,打开Android.mk文件找到LOCAL_SRC_FILES进行添加即可,路径是相对于修改的mk文件
3、函数多重定义
这种情况一般会提示multiply,外加那里first define了巴拉巴拉的。这些提示全忽略,这个问题的原因多数只有两种:一是头文件被互相包含或多次包含了,再就 是.c/.cpp文件被编了两次。
4、AndroidManifest.xml中错误
这是由于配置文件找不到程序的图标导致的,到ABC/proj,android/res路径下创建一个drawable文件夹,在里面添加icon,.h为程序图标即可
5、说明:
build_native.sh文件会做几件事情,第一就是把ABC/Resources中的文件(包括lua脚本和资源)拷贝到ABC/proj.android/assets中,Eclipse打包程序到手机中时拷贝 的就是assets中的资源。第二个功能是加载文件名为Android.mk的文件,这个就是传说中的的makefile文件。
6、NDK_ROOT未定义:在Windows的系统变量里设置一下就可以了,注意ndk版本
7、无法识别cocos2dx:Properties > Java Build path > Link Source,选择 ......\cocos2d-2.0-x-2.0.4\cocos2dx\platform\android\java\sr