cocos2dx 移值到android平台问题总结

ps:小弟最近在学习cocos2dx,不懂C++,不懂android,就有点java基础,自己照书敲了一个HelloWorld,可是编译遇到各种问题,各种不会的,现在就把我这几天来做个总结了,希望各位大大看到,能对你们有帮助...

首先我们在vs里面写好了一个cocos2dx项目,运行没有问题的时候,就想要把它移植到android平台或ios平台,android平台和ios平台和我们写代码这个平台是不一样的,首先系统就不一样的,那就想到所谓的"交叉编译“。(交叉编译:就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓 平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)。 有了这个想法就得去做了,我想移植到 android平台上,那我得把工作环境搭好,然后新建一个android项目,项目建好了,就得通过ndk进行编译了,编译的复杂的就是创建builder,我们通过这个builder去把帮我们编译的东东组装起来,来编译我们在vs中写的cocos2dx中的代码。(关于builder疑问,请大概看下builder设计模式)

builder这个工具好了,这时我们就可以通过它去编译我们的C++代码了,可是这里还需要告诉它如何编译,那就要Android.mk这个描述文件,builder根据这个描述就可以知道怎么编译我们写的C++代码。(.mk文件:首先你要知道它是一个Makefile文件,可以把Makefile文件理解成一个编译配置文件,它保存着如何编译的配置信息,即指导编译器如何来编译程序,并决定编译的结果是什么。)这些都搞好了,那只欠东风了,运行开始编译了。编译后生成了个.so文件,这个.so文件个人觉得就是我们那些C++代码的,原因是,android核心是Linux系统,而这个.so文件就跟.dll文件差不多.一般来说.so文件就是常说的动态链接库, 都是C或C++编译出来的。与Java比较就是:它通常是用的Class文件(字节码),还有Linux下的.so文件时不能直接运行的,一般来讲,.so文件称为共享库,最重要的一点是,我们这个项目的java类activity里面有一句System.loadLibrary("库名");加载我们这个库,细心的大大们也许觉得库名跟我们生成的库名字不一样,少了一个lib前缀,这个也是有原因的,看下面一段话:

Android 虚拟机允许应用程序源代码中要调用的方法在通过 JNI 本机代码中实现。简而言之,这意味着:

——您的应用程序的源代码将声明一个或多个方法通过实施以本机关键字,指示本机代码。

例如:native byte[] loadFile(String filePath);

——你必须提供一个本地共享库,包含了这些方法的实现,它将被打包到你应用程序中。这个库必须根据标准
  Unix约定 lib<something>.so。所以,应当包含一个标准的JNI入口点(稍后说明)。

例如:libFileLoader.so

——您的应用程序必须显式地加载库。例如,在应用程序启动的时候加载它,只需添加以下其源代码:

  static { 

  System.loadLibrary("FileLoader"); 

   }
  
  注意,不要lib和.so作为前缀和后缀。

呵呵,大大们应该理解了,关于库名的名字,当初我也有一个疑问,就是Android.mk里面有一个LOCAL_MODULE 和一个LOCAL_MODULE_FILENAME,到底哪一个是库名呢?我又问又找,终于搞明白了,下面是解释:

注意你可以使用 LOCAL_MODULE_FILENAME 给你的模块二进制文件一个与 LOCAL_MODULE 指出的模块名无关的模块名,所有呢,LOCAL_MODULE是module的名字,LOCAL_MODULE_FILENAME是输出的文件名。
到这最后一步,就到在真机上运行一上项目了,可一运行了,黑屏,这可头疼了,什么资源有问题,什么乱七八糟问题都搞还不行,找了几天没有找原因,终于在今天下午无意间发现了,原来我那个activity不是继承Cocos2dxActivity,而是Activity,导致不调用main.cpp里面的“Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit”这个函数,我就不知道为什么会这样的,也许当是手抖了一下,嘿嘿。在这呢,希望各位大大别犯小弟同样的错误了。
结束了,各位大大在第一次搞cococ2dx移植可能会遇到问题,我相信各位大大只要努力,一定会搞定的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值