Cocos2dx在Android上进行编译运行和测试

必备软件

1:JDK。 运行eclipse 必备环境,这里使用的是jdk-7u65-windows-x64.exe。大小为132808KB。

2:ADT plugin for eclipse。 这里使用的是adt-bundle-windows.rar 775940KB的版本。如果不是整合版,就需要下载eclipse,并自行配置ADT插件。

3:NDK。这里使用的是Android-ndk-r9c.rar 449880KB的版本。

4:Android sdk。这里用的是一个整合版 android-2.1_r01-windows.rar,压缩后1.87GB……

5:手机驱动。这里使用的是 WNQD_1.0_XiaZaiba.exe 万能驱动。883KB.

安装设置过程

1:首先一路安装jdk, 没什么好说的,我这边没出现神马问题。路径我修改了俩一个是JDK的路径为D盘,一个是JRE的路径也设置到D盘了。

2:解压SDK,NDK,ADT Bundle这些玩意儿。

3:打开ADT Bundle,找到sdk文件夹,把解压缩后的Android sdk目录内文件全部拷贝覆盖到ADT Bundle 的sdk目录文件夹下。(你会发现两者有好几个文件夹名相同),遇到覆盖冲突时,优先选择文件夹“合并”,文件选择“覆盖替换”。

4:运行eclipse文件夹内的eclipse,中间设置一下工作目录,设置是否消息反馈的就不说了。然后主界面上方选择window,选择Android SDK Manager。

我这里直接全选了。

点 Install package,接受许可条款,next。等待安装完成。

5:点击eclipse的window->Android Virtual Device Manager,new一个模拟器设备

6: Eclipse中File->new->android application project,输入随便一个项目名字,next,finish

7: 点debug,可以选择在avd (安卓模拟设备)上运行。也可以连接手机,直接运行查看效果。若手机运行不行,尝试先安装驱动。应该可以运行了。

接下来导入自己的项目

7:点File-> Import 选择android

8:eclipse中window->preferences填写 NDK路径

保存。

9:eclipse中,选择project , builder , new 一个builder编译器选项

10: 点new->Program

先填个名字

然后,上面填NDK的build.cmd路径,下面填android工作路径。

11: 点刚才面板的Refresh

12: 点Envirment变量

NDK_MODULE_PATH名字不要写错,配置路径两个:

一个是cocos2d解压后的目录(也就是windows工程解决方案所在的目录)再就是cocos2d-x第三方库所在目录: E:\Cocos2d\cocos2dx\platform\third_party\android\prebuilt (其中E:\Cocos2d是我cocos2d解压后的目录,也就是第一个配置目录)

13:BuildOptions

设置完成后,点击OK

Eclipse 会自动的进行编译,耐心等待一会

提示: 如果你的代码有改动,你只须变动下jni下的main.cpp,然后ctrl+S保存,就会自动编译。

编译期常见错误和处理方法

1: make.exe: *** No rule to make target E:\OnePiece\SrcClient/GameDataCenter/LoadEquipDisplay.cpp', needed byobj/local/armeabi/objs/gamedatacenter_static/LoadEquipDisplay.o’. Stop.

找到该文件所在目录的mk文件,检查是否要求编译该文件,而该文件却不存在,无法查找。

2: E:\OnePiece\SrcClient/SkepClient/SkepPart.cpp:27:9: error: ‘TRUE’ was not declared in this scope

不能使用windows下的宏,“TURE”,修改为true或者1( 视情况)。

3: E:\OnePiece\SrcClient/EntityClient/ChunnelBuild.h:13:15: error: expected ‘;’ at end of member declaration E:\OnePiece\SrcClient/EntityClient/ChunnelBuild.h:13:37: error: expected ‘)’ before ‘uid’

这种常常是因为windows下宏,DWORD,WORD,LONGLONG等类型在linux下未声明,导致变量 uid 类型不明确。

4: E:\OnePiece\SrcClient/EntityClient/Materiel.h:54:10: error: ‘BOOL’ does not name a type E:\OnePiece\SrcClient/EntityClient/Materiel.h:59:10: error: ‘DWORD’ does not name a type E:\OnePiece\SrcClient/EntityClient/Materiel.h:68:10: error: ‘WORD’ does not name a type

相当直观了。和上面一样。

5: E:\OnePiece\SrcClient/BuffClient/BuffPart.cpp:23:25: fatal error: CCLuaEngine.h: No such file or directory

compilation terminated. 找不到该文件。那么找编译buffPart.cpp 所在的mk。(通常一个目录下),添加CCLuaEngine头的位置

6:若点 debug 或者 run 后,console 不报错,也没有什么执行状态,可先进行 project -> clear 。

7: D:/SoftSave/android-ndk-r9c/android-ndk-r9c/toolchains/arm-linux-androideabi-4.6/prebuilt/windows/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/objs/godsoul_shared///Classes/ClientGlobal.o: in function CClientGlobal::create():jni/../../../Include/IBaseCore.h:140: error: undefined reference to ‘createBaseCore’ 这种就是函数未定义,无法链接。找到对应的 mk 文件,添加函数所在的cpp进行编译即可。

8:’string’ in namespace ‘std’ does not name a type 需要在所在文件添加 #include 头包含。

9:E:\OnePiece\SrcClient/lua/proj.android/Android.mk:43: *** commands commence before first target. Stop.

检查MK文件,通常俩问题导致 1. 上一行换行符号 \ 后面有空格 2. 本行前面的空白有非法字符