Sviluppo di giochi Android in c ++


26

Quindi, essendo principalmente uno sviluppatore di c / c ++, ho sempre pensato che l'unica opzione per lo sviluppo di giochi per me fosse usare iOS, che consente di c / c ++ (e minimizzare l'obiettivo C).

Tuttavia, ho sentito da un amico che Android ha un toolkit di sviluppo nativo che consente al codice c ++ di funzionare su Android.

Qualcuno l'ha usato, e se sì, come lo trovi? Voglio dire, "funzionerà" come iOS, o ci sono altre considerazioni che devono essere prese in considerazione a causa dell'ampia varietà di dispositivi Android disponibili?

Risposte:


26

Le API Android sono Java. Dal 2010, Google fornisce NDK (un SDK) per gli sviluppatori C / C ++.

L'NDK offre due modi:

  • per i dispositivi Android 1.5, è possibile caricare una libreria elf e utilizzarla dall'applicazione java tramite un bridge JNI
  • per i dispositivi Android 2.3, è possibile utilizzare un NativeActivity per bypassare il codice attività Java per l'applicazione a schermo intero.

NDK offre alcune API C / C ++:

  • una pseudo libc chiamata bionica: molte funzioni non sono disponibili
  • una libreria pthread
  • OpenGL ES 1.x (> Android 1.5) e OpenGL ES 2.x (Android 2.0)
  • OpenSL (supporto limitato su Android 2.3)

Ma molte API sono solo Java (disponibile anche tramite JNI).

La versione NDK 5 è la prima utilizzabile per gli sviluppatori C ++ perché offre:

  • RTTI
  • Supporta eccezioni
  • STLport
  • supporto gdb per programmi multi-thread

L'operazione più dolorosa è il debug su dispositivi Android. Quindi sviluppo il mio framework multipiattaforma (OS X, Windows, Linux, iOS e Android) per eseguire il debug prima su piattaforma desktop, successiva piattaforma iOS (su simulatore) e Last (Android).

L'emulatore Android (non un simulatore) ha prestazioni scarse e non può emulare OpenGL ES 2.x. Consiglio di sviluppare dispositivi reali.

Puoi trovare molte informazioni utili:


Il link "input code" ora è interrotto.
Josh1billion,

1
risolto: cambia Ellismarkov in IOPixel
Ellis il

9

Ho usato con successo Android NDK per il porting di due giochi SDL + OpenGL su Android e l'ho trovato sorprendentemente facile. Ho un wrapper Java a 200 righe che crea il contesto GL e fornisce classi di utilità come input, suono e caricamento dell'immagine per richiamare il codice C ++. Il programma di esempio "San-Angeles" nell'NDK è un ottimo punto di partenza.

A proposito, è possibile costruire programmi C / C ++ senza una linea di Java, ma trovo conveniente accedere ad alcuni metodi a livello di sistema operativo richiamando di tanto in tanto la JVM.

Penso che se il tuo gioco si compila già su Linux, ti sentirai a casa. Su oltre 100 file nel mio progetto attuale, solo 4 hanno una #ifdef ANDROID_NDKdirettiva (le classi relative all'immagine e al suono).

In effetti, la maggior parte del tempo trascorso nel porting del gioco è stato causato da un noto bug emulatore di cui non ero a conoscenza.


In precedenza ho avuto problemi (frustranti) nel tentativo di ottenere la semplice pipeline di compilare / costruire / distribuire il mio gioco su emulatore Android. Potete indicarmi una risorsa o qualcosa che posso usare? (Non so se hai queste classi di utilità open source, ma se lo fai, sarò interessato a vederle.) Grazie
brainydexter

1
@brainydexter: sono un tipo da linea di comando a cui piacciono gli autotools, quindi non sono sicuro che ti sarò molto utile, ma la mia pipeline è la seguente: assicurarsi che ANDROID_NDK_ROOTsia impostato, che sia in $PATH(insieme a [sdk_location]/toolse [sdl_location]/platform-tools); vai alla directory del progetto; compilare il codice NDK usando ndk-build; compilare il codice Java e compilare il pacchetto usando ant compile; caricare sull'emulatore o sul dispositivo collegato utilizzando ant install. Per quanto riguarda opensourcing del motore, non ho ancora deciso, ma sto già pubblicando il codice sul blog
sam hocevar

Grazie per il link! Terrò d'occhio il tuo blog.
brainydexter

4

Android supporta applicazioni native dalla versione 1.5 tramite Android NDK , che dovrebbe coprire molto bene il tuo pubblico di destinazione. Hai ancora bisogno di una semplice applicazione Java per Android che carica il lato nativo della tua applicazione tramite JNI e trasmette ad esempio input e rendering delle chiamate.

Esistono diverse versioni di NDK, ma è possibile utilizzare l'ultimo NDK e selezionare l'API di destinazione che si desidera supportare. Dalla versione 2.3 di Android puoi fare molto di più sul lato nativo e hai bisogno di meno codice Java, ma il supporto del dispositivo per 2.3 è attualmente molto limitato.

Lo sviluppo nativo di Android C / C ++ è una soluzione funzionante almeno per i giochi a schermo intero e lo sforzo necessario per il porting delle applicazioni OpenGL ES C / C ++ esistenti è piuttosto ridotto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.