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.