2012-02-08 8 views
7

Ho sviluppato un'app Cocos2d-X con XCode che funziona perfettamente quando lancio da XCode su un dispositivo iOS.Cocos2d-x: come eseguire il porting di un progetto Cocos2d-x sviluppato con XCode su Android (tramite Eclipse)?

Ora, voglio portarlo su Android. Quello che ho capito è che devo trovare un modo per importare il mio "progetto XCode" in Eclipse per poterlo compilare e lanciarlo su un dispositivo Android.

Attualmente sto cercando di convertire questo progetto ad una/progetto Android iOS ibridi seguendo questo tutorial: http://gameit.ro/2012/01/creating-an-iphone-and-android-cocos2d-x-hybrid-project-updated/#comment-640

Tuttavia, non vedo nessuna delle mie classi cpp (cocos2d-x classi C++) che appaiono in Eclipse quando apro questo progetto ibrido e ottengo i seguenti errori quando si tenta di compilarlo con 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 

devo importare alcuni file di Eclispe? Devo modificare alcuni file di Android.mk? Qualcos'altro?

Chiunque può aiutarmi o scrivere un tutorial su questo argomento? Grazie !!

risposta

12

Dagli sguardi di esso è necessario aggiungere la personalizzati creati file di Corsi/Android.mk nella sezione LOCAL_SRC_FILES in questo modo:

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

Hai bisogno di fare questo al fine di lasciare che il file di configurazione di Android conoscere i nuovi file che devono essere inclusi nel processo di compilazione.

È necessario eseguire questa operazione, afaik, per ogni nuovo file sorgente che si aggiunge al progetto.

+2

OMG, come mai non è incluso nel tutorial di cocos2d-x !!! – OMGPOP

0

@clawoo ha ragione, ma non è necessario includere tutti i file aggiunti al progetto. Invece, puoi fare quanto segue e dimenticartene;)

Per non dover aggiornare il file ogni volta che viene aggiunto un nuovo file sorgente al progetto, puoi usare il seguente script (disponibile qui: 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) 

si ricorda, che se si hanno i file da qualche altra parte, ad esempio:

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

è possibile effettuare le seguenti operazioni:

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

e

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

Nel mio caso ha funzionato.

SUGGERIMENTO:

Se avete problemi con il compilatore lamentano: 'Nessuna regola per fare bersaglio /.../', suggerisco di cancellare nei contenuti Eclipse di obj// armeabi/objs-debug local/cartella game_shared. Quindi, rieseguire il contenuto build_native.sh e aggiornare (F5) della cartella obj.

Problemi correlati