Cocos2d-x: Как перенести проект Cocos2d-x, разработанный с XCode, на Android (через Eclipse)? - PullRequest
7 голосов
/ 08 февраля 2012

Я разработал приложение Cocos2d-X с XCode, которое прекрасно работает, когда я запускаю его из XCode на устройстве iOS.

Теперь я хочу перенести его на 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 ]

12 голосов
/ 08 февраля 2012

Судя по всему, вам нужно добавить свои созданные файлы в Classes / Android.mk в разделе LOCAL_SRC_FILES, например:

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

Это необходимо сделать, чтобы файл сборки Android узнал о новых файлах, которые необходимо включить в процесс сборки.

Это необходимо сделать, afaik, для каждого нового исходного файла, который вы добавляете в проект.

0 голосов
/ 26 августа 2012

@ clawoo прав, но вам не нужно включать каждый файл, который вы добавляете в проект.Вместо этого вы можете сделать следующее и забыть об этом;)

Чтобы не нужно было обновлять файл каждый раз, когда в проект добавляется новый исходный файл, вы можете использовать следующий скрипт (находится здесь: http://www.cocos2d -x.org /boards / 6 / themes / 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 и обновите (F5) содержимое папки obj.

...