2012-02-08 7 views
7

Opracowałem aplikację Cocos2d-X z XCode, która działa idealnie, gdy uruchomię ją z XCode na urządzeniu z iOS.Cocos2d-x: Jak przenieść projekt Cocos2d-x opracowany z XCode na Androida (przez Eclipse)?

Teraz chcę przenieść go na Androida. Rozumiem, że muszę znaleźć sposób na zaimportowanie mojego "projektu XCode" do Eclipse, aby móc go skompilować i uruchomić na urządzeniu z Androidem.

Obecnie próbuję przekonwertować ten projekt do iOS hybrydowe/projektu Android po tym tutorialu: http://gameit.ro/2012/01/creating-an-iphone-and-android-cocos2d-x-hybrid-project-updated/#comment-640

Niemniej jednak, nie widzę żadnego z moich klas cpp (cocos2d-x C++ klas) pojawiających się w Eclipse kiedy otwieram ten projekt hybrydowy i otrzymuję następujące błędy podczas próby skompilować go z 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 

Czy muszę zaimportować kilka plików do Eclispe? Czy muszę zmodyfikować niektóre pliki android.mk? Coś innego?

Ktoś może mi pomóc lub napisać samouczek na ten temat? Dzięki !!

Odpowiedz

12

Od spojrzeń tego trzeba dodać niestandardowe utworzone pliki do klas/Android.mk w sekcji LOCAL_SRC_FILES jak ten:

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

trzeba zrobić to, aby pozwolić android plik build wiedzieć o nowych plikach, które należy uwzględnić w procesie kompilacji.

Będziesz musiał to zrobić, afaiik, dla każdego nowego pliku źródłowego dodanego do projektu.

+2

OMG, dlaczego to nie jest zawarte w samouczku cocos2d-x !!! – OMGPOP

0

@clawoo ma rację, ale nie musisz uwzględniać każdego pliku dodawanego do projektu. Zamiast tego możesz wykonać następujące czynności i o tym zapomnieć;)

Aby nie trzeba aktualizować pliku za każdym razem, gdy nowy plik źródłowy zostanie dodany do projektu, możesz użyć następującego skryptu (tutaj: 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) 

Proszę pamiętać, że jeśli masz pliki gdzieś indziej, np:

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

można wykonać następujące czynności:

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

i

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

W moim przypadku to zadziałało.

WSKAZÓWKA:

Jeśli masz problemy z kompilator narzeka: 'żaden przepis uczynić cel /.../', proponuję, aby usunąć w Eclipse zawartości obj/local/armeabi/OBJS-debug/folder game_shared. Następnie ponownie uruchom plik build_native.sh i odśwież (F5) folder obj.

Powiązane problemy