我开发了一个带有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文件?还有别的吗?
有人可以帮我或写一个关于这个主题的教程吗?谢谢!!
答案 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文件夹的内容。