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



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

现在,我想把它移植到安卓系统。我所理解的是,我必须找到一种方法将我的"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文件吗?还有别的吗?

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

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

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

你需要这样做,以便让android构建文件了解需要包含在构建过程中的新文件。

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

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

就我而言,它奏效了。

提示:

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

最新更新