x,IOS,游戏,开发/交流/学习/资源 马宗扬

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

转载时请注明原文出处 :

———————————————————————————————————————————————————–

笔者的开发环境:

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))

没有早一步,也没有晚一步,刚好遇上了你!

x,IOS,游戏,开发/交流/学习/资源 马宗扬

相关文章:

你感兴趣的文章:

标签云: