Cocos2d-x教程(38)-iOS移植Android

Cocos2d-x教程(38)-iOS移植Android,第1张

概述欢迎加入Cocos2d-x 交流群:193411763 转载时请注明原文出处 :http://blog.csdn.net/u012945598/article/details/44338659 -------------------------------------------------------------------------------------------------------

欢迎加入Cocos2d-x 交流群:193411763


转载时请注明原文出处 :http://blog.csdn.net/u012945598/article/details/44338659


-----------------------------------------------------------------------------------------------------------------------------------------------------------

笔者的开发环境:

Mac OS X 10.9.5

Cocos2d-x 3.3 final版本

Xcode 6.1.1 版本

本篇文章主要记录笔者在移植中遇到的一些问题。


(1) 修改AndroID.mk文件

笔者的项目是基于Lua的,在之前的文章中曾经提到,Lua的工程和C++的工程的文件结构不一样,相对来说C++的工程移植的步骤要较简单一些。无论是C++工程或Lua工程,修改AndroID.mk文件都是必须要做的,这个文件的目录在Lua工程中位于: 项目工程文件/frameworks/runtime-src/proj.androID/jni/AndroID.mk 。C++的工程直接打开项目工程文件即可看到proj.androID文件夹。


大家可以对比一下,一个空的C++ HelloWorld工程和一个空的Lua工程中,AndroID.mk文件的区别,这里笔者只给出笔者项目的最终AndroID.mk文件供大家参考(基于Lua工程,C++可能还需要做些修改)。

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODulE := cocos2dlua_sharedLOCAL_MODulE_filename := libcocos2dluadefine walk  $(wildcard $(1)) $(foreach e,$(wildcard $(1)/*),$(call walk,$(e)))endefALLfileS  = $(call walk,$(LOCAL_PATH)/../../Classes)file_List := hellolua/main.cppfile_List += $(filter %.cpp,$(ALLfileS))file_List += $(filter %.c,$(ALLfileS))file_INCLUDES := $(shell find $(LOCAL_PATH)/../../Classes -type d)LOCAL_SRC_fileS := $(file_List:$(LOCAL_PATH)/%=%)LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../ClassesLOCAL_C_INCLUDES += $(shell ls -FR $(LOCAL_C_INCLUDES) | grep $(LOCAL_PATH)/$ )LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES:$(LOCAL_PATH)/%:=$(LOCAL_PATH)/%)					LOCAL_STATIC_liBRARIES := cocos2d_lua_staticLOCAL_STATIC_liBRARIES += cocostudio_staticLOCAL_STATIC_liBRARIES += cocos2dx_staticinclude $(BUILD_SHARED_liBRARY)$(call import-module,scripting/lua-bindings/proj.androID)

上面是笔者目前项目中的完整的AndroID.mk文件。


(2) 编译时找不到头文件问题

如果.mk文件已修改好,在交叉编译过程中,我们可能会遇到找不到某某文件的问题,这里的文件指的是Cocos中的某些文件,例如笔者在项目中使用了GUI,引入了CocosGUI.h的头文件,但在编译时却发现找不到。解决这个问题的方法是将该头文件的路径补全,例如CocosGUI.h 在3.3版本中位于ui文件夹下,所以在引用时需要写 #include "ui/CocosGUI.h"。在iOS项目中不写ui是不会报错的,但在编译时会出现问题。


(3) 自定义Lua绑定问题。

我们Lua的项目中,通常会遇到C++和Lua的交互问题,这时候我们会将C++的某些方法映射到Lua中,也就是使用lua_binding。如果你没有将自定义的C++方法绑定到Lua,那么这个问题完全可以忽略,如果绑定了,那么就需要修改另外一个.mk文件来完成编译。

打开 工程文件名/frameworks/cocos2d-x/cocos/scripting/lua-bindings/proj.androID/AndroID.mk

对于lua_bindings工程文件中需要编译的所有C++文件都是在这个mk文件中完成的,我们需要做的就是在适当的位置将我们自定义的映射文件加到里面,如下图:


(4) 映射文件引用头文件问题

在我们的自定义的映射文件中,必然需要引用工程中的Classes文件夹下的cpp文件,如果这里我们仅仅是写 #include "xxx.h" 在iOS是没有问题的,但在编译时,同样会提示找不到这个xxx文件。这里需要加上的是这个文件的全路径,比如你要引入 xxx.h文件 ,找到这个文件,右键显示简介,显示出来的路径就是我们要在这里写的路径。这里最好的方法是写一个方法去获取文件的全路径,否则如果写死在本地在版本管理中会出现问题。


(5) 资源文件名

iOS中的资源虽然可以使用中文名,但是正常人都知道不要使用中文命名,虽然iOS中不会有问题,但在交叉编译时使用中文命名资源同样会报错。


(6) .c文件

笔者的第一个问题中,其中有一行写的是:file_List += $(filter %.c,$(ALLfileS))

这是由于笔者的项目中使用了cJson库,而cJson中使用的是C的源文件,所以我们在编译时仅仅将C++编译是不够的,还要对.c文件的编译,否则就无法使用。

总结

以上是内存溢出为你收集整理的Cocos2d-x教程(38)-iOS移植Android全部内容,希望文章能够帮你解决Cocos2d-x教程(38)-iOS移植Android所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1048656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存