AndroidCocos2dx游戏编译运行测试
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 by
obj/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. 本行前面的空白有非法字符