Cocos2d-x:如何将使用XCode开发的Cocos2d-x项目移植到Android(通过Eclipse)?

时间:2012-02-08 11:03:29

标签: android eclipse xcode cocos2d-iphone cocos2d-x

我开发了一个带有XCode的Cocos2d-X应用程序,当我在iOS设备上从XCode启动时,它可以很好地工作。

现在,我想将它移植到Android。我的理解是我必须找到一种方法将我的“XCode项目”导入Eclipse,以便能够编译它并在Android设备上启动它。

我正在尝试按照本教程将此项目转换为混合iOS / Android项目:http://gameit.ro/2012/01/creating-an-iphone-and-android-cocos2d-x-hybrid-project-updated/#comment-640

然而,当我打开这个混合项目时,我没有看到我的任何cpp类(cocos2d-x C ++类)出现在Eclipse中,并且在尝试使用build_native.sh编译时出现以下错误:

Compile++ thumb  : game_logic <= AppDelegate.cpp
jni/../../Classes/AppDelegate.cpp:14:23: error: IntroMenu.h: No such file or directory
jni/../../Classes/AppDelegate.cpp:15:23: error: GameLayer.h: No such file or directory
jni/../../Classes/AppDelegate.cpp:16:26: error: ScoreManager.h: No such file or directory
jni/../../Classes/AppDelegate.cpp: In member function 'virtual bool AppDelegate::applicationDidFinishLaunching()':
jni/../../Classes/AppDelegate.cpp:99: error: invalid use of incomplete type 'struct ScoreManager'
jni/../../Classes/AppDelegate.h:17: error: forward declaration of 'struct ScoreManager'
jni/../../Classes/AppDelegate.cpp:101: error: invalid use of incomplete type 'struct ScoreManager'
jni/../../Classes/AppDelegate.h:17: error: forward declaration of 'struct ScoreManager'
jni/../../Classes/AppDelegate.cpp:118: error: 'GameLayer' has not been declared
jni/../../Classes/AppDelegate.cpp:120: error: 'IntroMenu' has not been declared
make: *** [obj/local/armeabi/objs-debug/game_logic/AppDelegate.o] Error 1
macbook-de-regis-andre-2:android regisandre$ ./build_native.sh

我是否必须将一些文件导入Eclispe?我是否需要修改一些android.mk文件?还有别的吗?

有人可以帮我或写一个关于这个主题的教程吗?谢谢!!

2 个答案:

答案 0 :(得分:12)

从外观上看,您需要将自定义创建的文件添加到LOCAL_SRC_FILES部分中的Classes / Android.mk,如下所示:

LOCAL_SRC_FILES := AppDelegate.cpp \
                   HelloWorldScene.cpp \
                   IntroMenu.cpp \
                   GameLayer.cpp \
                   ScoreManager.cpp

你需要这样做才能让android构建文件知道需要包含在构建过​​程中的新文件。

您需要为您添加到项目中的每个新源文件执行此操作。

答案 1 :(得分:0)

@clawoo是对的,但您不必包含添加到项目中的每个文件。相反,你可以做以下事情并忘掉它;)

为了在每次将新的源文件添加到项目时不需要更新文件,您可以使用以下脚本(在此处找到:http://www.cocos2d-x.org/boards/6/topics/5321

dirs := $(shell find $(LOCAL_PATH) -type d)

cppfilestemp1 := $(shell find $(LOCAL_PATH) -type d)
cppfilestemp2 := $(shell find $(cppfilestemp1) -name *.cpp)
cppfilestemp3 := $(sort $(cppfilestemp2))
cppfiles := $(subst $(LOCAL_PATH)/,,$(cppfilestemp3))

LOCAL_SRC_FILES := \
           $(cppfiles)

请记住,如果你有其他地方的文件,例如:

LOCAL_SRC_FILES := main.cpp \
../../../Classes/AppDelegate.cpp \
../../../Classes/HelloWorldScene.cpp \

您可以执行以下操作:

cppfilestemp1 := $(shell find $(LOCAL_PATH)/../../../Classes/ -type d)

LOCAL_SRC_FILES := main.cpp
LOCAL_SRC_FILES += $(cppfiles)

就我而言,它有效。

提示:

如果你有编译器抱怨的问题:'没有规则来制作目标/.../',我建议删除obj / local / armeabi / objs-debug / game_shared文件夹的Eclipse内容。然后,重新运行build_native.sh并刷新(F5)obj文件夹的内容。