注意:本文的Cocos2d-x的版本是2.2.3,更高版本可能会略有不同,低版本者不建议参考
首先需要配置XCODE环境
下载Cocos2d-x
然后下载Cocos2d-x的整个源码:http://www.cocos2d-x.org/download 选择2.2.3的版本
下载后解压,建议移动到文稿里
2.2.3的版本开始,Cocos2d-x将不能通过XCODE内置模板创建,而是必须通过脚本创建项目
这里,我的源码路径是:/Users/mac/Documents/Projects/cocos2d-x-2.2.3/,以下所有相同路径都可以根据您自己放置Cocos2d-x源码的位置来替换。
现在利用其自带的脚本,新建一个项目
新建项目
首先终端进入: cd /Users/mac/Documents/Projects/cocos2d-x-2.2.3/tools/project-creator
然后执行脚本:./create_project.py -project MyGame -package com.wangtao.mygame -language cpp
这里的MyGame是项目名称,请根据自己需求改变
这里的com.wangtao.mygame是包名,请根据自己需求改变。改变后的包名将在之后的XCODE和ECLIPSE两个环境中同时生效。
脚本执行完成后,新的项目在这个路径下:/Users/mac/Documents/Projects/cocos2d-x-2.2.3/projects
找到这个项目,进入后寻找proj.ios文件夹找到MyGame.xcodeproj打开就可以进入XCODE开发游戏了。
Android环境配置
Eclipse for mac 下载地址:http://eclipse.org/downloads/
Android SDK for mac下载地址:http://developer.android.com/sdk/index.html
NDK下载地址:http://developer.android.com/tools/sdk/ndk/index.html
ADT下载地址:http://dl.google.com/android/adt/22.6.2/adt-bundle-mac-x86_64-20140321.zip
请注意下载Mac版本,并匹配您系统是32位还是64位。几个包都比较大,下载速度比较慢,建议使用支持断点续传的工具下载。
配置环境变量
为了让编译器在以后能根据名称简称快速定位到其所在路径,需要将他们的映射关系配置并保存。
打开“终端”,然后输入 pico .bash_profile 回车
然后手动将以下路径输入进去:
export ANDROID_SDK_ROOT=/Users/mac/Documents/Projects/sdk/
export ANDROID_NDK_ROOT=/Users/mac/Documents/Projects/android-ndk-r9d/
export COCOS2DX_ROOT=/Users/mac/Documents/Projects/cocos2d-x-2.2.3/
export NDK_ROOT=/Users/mac/Documents/Projects/android-ndk-r9d/
export PATH=$PATH:$ANDROID_SDK_ROOT
export PATH=$PATH:$ANDROID_NDK_ROOT
注意以上输入过程中,“=/”左右都不能有空格,否则会配置失败
输入完成之后,Control+x 进行保存,然后提示是否保存,输入 y ,最后回车即可!
配置路径完成之后建议监测一下是否配置正确
检验路径步骤: 关闭你的“终端”,重新打开,如果之前路径配置有问题,那么重新打开的“终端”将出现如下提示:-bash: exoort: command not found 如果没有此类提示,说明路径配置完成。
建立Android项目
进入Eclipse的文件夹,启动Eclipse,新建Project,选择Android Project from Existing Code,点击Browse,选择/Users/mac/Documents/Projects/cocos2d-x-2.2.3/projects下您要导入的游戏项目,进入对应的游戏文件夹后,选择proj.android文件夹,然后点击Open。
项目导入进来后,可以看到assets文件下的资源就是XCODE中对应的资源,以后不需要来回拷贝资源,大大节省项目移植到Android平台的时间。
此外项目自动生成了入口Activity,继承自Cocos2dxActivity。但如果是第一次导入项目,这个库是没有的,需要导入。方法是,再新建一个Project,选择Android Project from Existing Code,点击Browse,选择/Users/mac/Documents/Projects/cocos2d-x-2.2.3/cocos2dx/platform/android文件夹。
在最终编译之前,需要特别注意的是:
1、检查Eclipse中本项目的jni/hello/cpp/main.cpp中的代码,默认情况下,上面inlude了一个“HelloWolrdScene”,如果您的游戏删掉了这个类,那这里也要对应的去掉这个include
2、检查build_native.sh中,在# options下需要添加NDK_ROOT :NDK_ROOT= "/Users/mac/Documents/Projects/android-ndk-r9d"
最终编译和运行
进入终端,根据项目中的build_native.sh位置,直接执行这个编译脚本,如:
/Users/mac/Documents/Projects/cocos2d-x-2.2.3/projects/MyGame/proj.android/build_native.sh
这次编译目的是生成.so文件,并打包到Android的APK中,如果编译成功会看到如下文字
[armeabi] SharedLibrary : libcocos2dcpp.so
[armeabi] Install : libcocos2dcpp.so => libs/armeabi/libcocos2dcpp.so
如果编译出错,则会显示对应的错误原因,强烈建议先保证在XCODE中编译通过的前提下,再进行android的.SO编译。
编译通过后,点击项目的根节点,并按下F5键,可以看到项目中多了libs/armeabi/libcocos2dcpp.so。
最后通过Eclipse的RUN功能,就可以直接生成APK了。
权限给予
mac 下终端访问文件出现“Permission Denied”解决方案:
一个文件有3种权限,读、写、可执行,你这个文件没有可执行权限,需要加上可执行权限。
1. 终端下先 cd到该文件的目录下
2. 执行命令 chmod a+x ./文件名
NDK不兼容
在编译过程中,可能遇到这样的错误提示:format not a string literal and no format arguments [-Werror=format-security]
原因:
android-ndk-r9与Eclipse的版本不兼容问题
方案之一(我搜到的):
在对应项目的proj.android/jni/Application.mk添加一句话
APP_CFLAGS += -Wno-error=format-security
爽快的双平台同时开发
推荐在XCODE中进行游戏开发,调试。每一次需要生成安卓APK的时候,先通过终端执行build_native.sh脚本,然后Eclipse的项目根目录点击F5刷新.so后文件后编译打包一气呵成。
唯一麻烦的一点就是iphone和android手机可能需要来回插拔,但这对游戏开发者已经是最高的跨平台开发效率了。
本文由王焘原创,转载请注明原文地址。
http://www.cnblogs.com/wt616/p/3758828.html
三、问题集锦
以下是一些常见问题的集锦,没有覆盖的很全面,只是一部分,所以这个帖子将长期有效,大家在移植过程中总结的一些移植心得希望可以在帖子下留言,我整理以后将在本帖中发布出来,供更多的开发者学习。
1、Cocos2d-x版本ndk版本必须使用ndkr9d,使用ndkr9或者其他版本都不可以。
问题参考链接:
http://www.cocoachina.com/bbs/read.php?tid=225764
http://www.cocoachina.com/bbs/read.php?tid=215902
2、错误日志:
19:15:03 **** Incremental Build of configuration Default for project DragonBall ****
"D:\\android-ndk-r9d\\ndk-build.cmd" all
系统找不到指定的路径。
19:15:03 Build Finished (took 526ms)
解决方案:
出现错误的原因可能是NDKr9d版本没有选择正确,有64和32位之分,要和自己电脑的版本对应起来。
3、错误日志:
"D:\\android-ndk-r9d\\ndk-build.cmd" all
Android NDK: WARNING: Ignoring unknown import directory: E:\cocos2d-x-2.2.3
Android NDK: jni/Android.mk: Cannot find module with tag 'cocos2dx' in import path
Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ?
Android NDK: The following directories were searched:
Android NDK:
jni/Android.mk:66: *** Android NDK: Aborting. . Stop.
解决方案:
如果NDK路径设置不正确可能会出现如下的错误信息。大家需要检查一下NDK的路径是否正确,在win平台下路径要用正斜杠而不是反斜杠。
4、错误日志:
make: *** No rule to make target `jni/../../Classes/HelloWorldcene.cpp', needed by `obj/local/armeabi/objs-debug/cocos2dcpp_shared/__/__/Classes/HelloWorldcene.o'. Stop.
make: Leaving directory `/Users/mac/Documents/cocos2d-x/cocos2d-x-3.0/projects/Test8/proj.android'
Error running command, return code: 2
解决方案:
出现如下的错误是.mk文件中的cpp文件名没有写正确,例如HelloWorldScene文件写成了HelloWorldcene。
5、错误日志:
**** Build of configuration Default for project FirstGame ****
E:\android-ndk-r9c\ndk-build.cmd
Android NDK: WARNING:E:/cocos2d-x-2.2.3/cocos2dx/Android.mk:cocos2dx_static: LOCAL_LDLIBS is always ignored for static libraries
[armeabi] Install : libcocos2dcpp.so => libs/armeabi/libcocos2dcpp.so
解决方案:
需要将eclipse工程项目下的dependencies库移除。如果错误任然存在,可以尝试刷新一下工程。
6、错误日志:
format not a string literal and no format arguments
解决方案:
点击这个问题会定位到CCString::createWithFormat(xxx)这个函数上,一般都是没有加格式控制符导致的,需要写成createWithFormat("%s",xxx);