7

我开发了一个带有 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 文件?还有什么?

任何人都可以帮助我或写一个关于这个主题的教程?谢谢 !!

4

2 回答 2

12

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

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

您需要这样做是为了让 android 构建文件知道需要包含在构建过​​程中的新文件。

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

于 2012-02-08T11:29:36.690 回答
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)

就我而言,它起作用了。

暗示:

如果您遇到编译器抱怨的问题:'No rule to make target /.../',我建议在 Eclipse 中删除 obj/local/armeabi/objs-debug/game_shared 文件夹的内容。然后,重新运行 build_native.sh 并刷新 (F5) obj 文件夹的内容。

于 2012-08-26T18:43:21.800 回答