移动应用编程我学得比较晚,这些天看了不少cocos2d-x的教程,趁着编译的空闲记录下学习过程和其中碰到的问题。

个人认为学习任何游戏框架和引擎都必需掌握的基础知识之一就是“跨平台编译”,这样就可以同时发布多个平台的应用,有利于推广。所以两天都没打代码,直接找教程学习cocos2d-x的跨平台编译方法及过程(网络上的资料包括编译时可能碰到的问题,大多很零散,所以这里整合一下)。

我自己的搭建的环境是VMWare9.0虚拟机+Mac+XCode,Win7+VS2010+eclipse+Cgywin+NDK,其中VS2010整合后可以正常使用cocos2d-x的核心功能,因为 编译生成各个库的时候没有碰到什么问题,只是生成project-Js时报了几个错误,不过我更喜欢用虚拟机运行Mac+XCode进行代码编写,感叹现在C++编程的效率被这些工具提升得很高啊……就连我这样的超级菜鸟都能感觉到……

虚拟机上安装Mac和XCode就不多说了,自己百度就能找到,唯一的一点就是vmware8.0只支持Mac10.7的安装,而9.0可以支持Mac10.8

cgywin+NDK的安装和配置稍微麻烦点,不过百度也可以查到很多教程,不过NDK的版本众多,有些版本并不能保证在自己电脑上运行和很正常,这时就可以换个版本,下面是google官方的NDK下载页面:

http://developer.android.com/tools/sdk/ndk/index.html#Installing

cocos2d-x用的是2.1.2,感觉Bug比先前用过的libgdx多很多啊,版本更新日程上排的密密麻麻的,不过这功能是比较全面,平台跨着方便,所以说是写2D游戏最佳的游戏框架也不为过了。安装过程同样就不重复叙述了,无论是在Mac上还是win上都有详细的安装教程,下面记录的就是ios和android跨平台编译的详细步骤:

首先,是在XCode上编写ios的工程,完成后在windows上用cocos2d-x的跨平台编译辅助工具新建一个android项目,到cocos2d-x的根目录下可以找到这个create-android-project.bat文件,首先要用记事本打开编辑三个参数:set _ANDROIDTOOLS=D:\android\android-sdk-windows\tools(android sdk tools的路径),set _CYGBIN(cgywin的bin路径)以及set _NDKROOT=D:\android-ndk-r8e(NDK的路径),也许你设置后打开时会看到什么“不是内部命令”之类的东西,其它的我不知道,我只知道我碰上的是文件有问题(虽然我下载下来从来没动过),但我还是用标准的书写格式重新替换了文件,然后就能工作正常了,改动后的文件内容如下:

@echo off
:: This script is used to create an android project.
:: You should modify _ANDROIDTOOLS _CYGBIN _NDKROOT to work under your environment.
:: Don't change it until you know what you do.setlocal:: Check if it was run under cocos2d-x root
if not exist "%cd%\create-android-project.bat" echo Error!!! You should run it under cocos2dx root & pause & exit 2if not exist "%~dpn0.sh" echo Script "%~dpn0.sh" not found & pause & exit 3:: modify it to work under your environment
set _CYGBIN=e:\cygwin\bin
if not exist "%_CYGBIN%" echo Couldn't find Cygwin at "%_CYGBIN%" & pause & exit 4:: modify it to work under your environment
set _ANDROIDTOOLS=e:\android\android-sdk\tools
if not exist "%_ANDROIDTOOLS%" echo Couldn't find android sdk tools at "%_ANDROIDTOOLS%" & pause & exit 5:: modify it to work under your environment
set _NDKROOT=e:\android\android-ndk-r8
if not exist "%_NDKROOT%" echo Couldn't find ndk at "%_NDKROOT%" & pause & exit 6:: create android project
set /P _PACKAGEPATH=Please enter your package path. For example: org.cocos2dx.example:
set /P _PROJECTNAME=Please enter your project name:
if exist "%CD%\%_PROJECTNAME%" echo "%_PROJECTNAME%" exists, please use another name & pause & exit 7
echo "Now cocos2d-x suppurts Android 2.1-update1, 2.2, 2.3 & 3.0"
echo "Other versions have not tested."
call "%_ANDROIDTOOLS%\android.bat" list targets
set /P _TARGETID=Please input target id:
set _PROJECTDIR=%CD%\%_PROJECTNAME%echo Create android project
mkdir %_PROJECTDIR%
echo Create Android project inside proj.android
call "%_ANDROIDTOOLS%\android.bat" create project -n %_PROJECTNAME% -t %_TARGETID% -k %_PACKAGEPATH% -a %_PROJECTNAME% -p %_PROJECTDIR%\proj.android
call "%_ANDROIDTOOLS%\android.bat" update project -l ../../cocos2dx/platform/android/java -p %_PROJECTDIR%\proj.android
:: Resolve ___.sh to /cygdrive based *nix path and store in %_CYGSCRIPT%
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%~dpn0.sh"') do set _CYGSCRIPT=%%A:: Resolve current dir to cygwin path
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%cd%"') do set _CURRENTDIR=%%A:: Resolve ndk dir to cygwin path
for /f "delims=" %%A in ('%_CYGBIN%\cygpath.exe "%_NDKROOT%"') do set _NDKROOT=%%A:: Throw away temporary env vars and invoke script, passing any args that were passed to us
endlocal & %_CYGBIN%\bash --login "%_CYGSCRIPT%" %_CURRENTDIR% %_PROJECTNAME% %_NDKROOT% %_PACKAGEPATH% "windows"pause

正常运行后输入包名:com.xx.xx和工程名:xx,然后会列出安装的android SDK版本,选择支持的platform版本即可。我在这一步遇到的问题就是:cocos2d-x是放在中文目录下,在编译的最后一步会出错,这时将不会生成待会要用到的build_native.sh,也就无法进行从ios跨到android的编译……这一点在与VS2010整合时也应该注意……

在编译前,可以先解决一个问题,这是会在编译项目后会碰到的:具体请参考http://blog.163.com/zhoulong19880518@126/blog/static/6070970220132511558143/

经过上面一步后,会在cocos2d-x的根目录下生成对应项目名的目录,里面将包含三个文件夹,其中class和resouce就是用来存放C++文件和资源文件的,你可以在XCode编写的ios工程项目中找到这些文件,把它们copy到已经生成android工程项目的对应的目录中(也可以在Mac中打包上传到百度网盘,再在win下下载),然后打开cgywin的控制台,进入到已经生成工程项目的名为proj.android的目录下,再输入./build_native.sh,则编译开始……然后是个漫长的编译过程……

完成后将工程导入eclipse中,运行即可看到效果,不过一些人不能在模拟器上正常运行工程,看到如:No configs match configSpec,exceptionininitializererror这样的提示错误,所以还是进入真机测试吧。如果在编译时提示please define NDK_ROOT的话那就表示Cgywin中的NDK的设置不对,我这里碰到的问题是Cgywin中已经设置了NDK_ROOT,包括系统环境变量也设置了,但运行时依然出这个提示,后来发现设置系统环境变量名时用的是NDK,而不是NDK_ROOT,重新编辑下,再重启Cgywin控制台则可正常编译……VS20xx下的编译同样类似,只不过是直接把class和Resource里的文件Copy到对应的目录下就能直接用了。

cocos2d-x 菜鸟学习笔记一(跨平台编译)相关推荐

  1. 菜鸟学习笔记:Java提升篇12(Java动态性2——动态编译、javassist字节码操作)

    菜鸟学习笔记:Java提升篇12(Java动态性2--动态编译.javassist字节码操作) Java的动态编译 通过脚本引擎执行代码 Java字节码操作 JAVAssist的简单使用 常用API ...

  2. 菜鸟学习笔记:Java提升篇11(Java动态性1——注解与反射)

    Java提升篇11(Java其它高级特性--注解与反射) 注解(Annotation) JDK内置注解 自定义注解 元注解(meta-annotation) 反射(reflection) 动态语言 反 ...

  3. 菜鸟学习笔记:Java提升篇3(容器3——泛型、排序)

    菜鸟学习笔记:Java容器3--泛型.排序 泛型 泛型类 泛型接口 泛型方法 泛型继承 通配符"?" 泛型知识点补充 容器排序 Comparable接口与compareTo方法 C ...

  4. 菜鸟学习笔记:Java基础篇7(包装类、时间相关类、文件类、异常处理类)

    菜鸟学习笔记:Java其他常用类 基本数据类型包装类 时间处理和文件处理相关类 Date时间类 SimpleDateFormat Calendar日历类 文件类 异常机制 异常的概念 Java异常处理 ...

  5. 菜鸟学习笔记:Java提升篇10(网络2——UDP编程、TCPSocket通信、聊天室案例)

    菜鸟学习笔记:Java提升篇10(网络2--UDP编程.TCPSocket通信) UDP编程 TCP编程(Socket通信) 单个客户端的连接 多个客户端的连接(聊天室案例) UDP编程 在上一篇中讲 ...

  6. 菜鸟学习笔记:Java提升篇9(网络1——网络基础、Java网络编程)

    菜鸟学习笔记:Java提升篇9(网络1--网络基础.Java网络编程) 网络基础 什么是计算机网络 OS七层模型 Java网络编程 InetAddress InetSocketAddress URL类 ...

  7. 菜鸟学习笔记:Java提升篇8(线程2——线程的基本信息、线程安全、死锁、生产者消费者模式、任务调度)

    菜鸟学习笔记:Java提升篇8(线程2--线程的基本信息.线程安全.死锁.生产者消费者模式.任务调度) 线程的基本信息 线程同步 线程安全 死锁 生产者消费者模式 任务调度(了解) 线程的基本信息 J ...

  8. 菜鸟学习笔记:Java提升篇6(IO流2——数据类型处理流、打印流、随机流)

    菜鸟学习笔记:Java IO流2--其他流 字节数组输入输出流 数据类型处理流 基本数据类型 引用类型 打印流 System.in.System.out.System.err 随机流RandomAcc ...

  9. 菜鸟学习笔记:Java提升篇5(IO流1——IO流的概念、字节流、字符流、缓冲流、转换流)

    菜鸟学习笔记:Java IO流1--IO流的概念.字节流.字符流.缓冲流.转换流 IO流的原理及概念 节点流 字节流 文件读取 文件写出 文件拷贝 文件夹拷贝 字符流 文件读取 文件写出 处理流 缓冲 ...

最新文章

  1. 报告:美国AI投资占全球56% 中国第二增长最快
  2. MIT媒体实验室主任辞去一切职务:拿了爱泼斯坦170万美金,涉及程序违规,麻省理工宣布彻查...
  3. 【并查集】 HDU 4424 Conquer a New Region 贪心
  4. iOS中XML解析汇总
  5. Python基础知识-05-数据类型总结字典
  6. 华为机试题【10】-求数字基root
  7. java 对象引用 弱引用吗_谈谈Java对象的强引用,软引用,弱引用,虚引用分别是什么...
  8. 获奖者:武永卫,男,清华大学计算机系教授、博士生导师,《大数据》杂志编委。...
  9. 互联网大事件:《江南style》如何蹿红?(转)
  10. 安卓讲课笔记(9):列表视图
  11. 2016/4/22 图形用户界面
  12. ssh(安全协议外壳)
  13. ERP选型需把握主动权!
  14. mysql时间戳_MySQL 时间戳(Timestamp)函数
  15. 关于C语言中fseek函数的使用
  16. Idea翻译插件google翻译失败超时
  17. 网友对sars病毒事件的对话(转)
  18. 2020最新版前端学习路线图--Javascript网页编程重点知识
  19. abb机器人过载报错_ABB机器人常见报警代码与解决方案
  20. pytorch下Numpy,Torch,Spicy,NetworkX及其他基本数据类型相关操作(持续更新)

热门文章

  1. 测试3d游戏pfs的软件,Beepa Fraps(3D游戏测帧录制软件)
  2. 天下无贼台词经典(收藏)
  3. 实时高分辨率视频抠像
  4. lua调试的工具选择
  5. 支付与对账业务的流程
  6. 寒假每日一题 1 : 笨拙的手指 java
  7. Django自定义Storage实现图片上传至各大OSS(上篇)
  8. 【通信】基于Matlab实现动态帧时隙ALOHA(Dynamic Framed Slotted ALOHA)算法
  9. 正则,异常、Collection、List集合
  10. Android 客户端如何与服务器时间同步