Développement de jeux Android en c ++


26

Donc, étant principalement un développeur c / c ++, j'ai toujours pensé que la seule option pour le développement de jeux mobiles pour moi était d'utiliser iOS, ce qui permet de c / c ++ (et de minimiser l'objectif C).

Un ami m'a cependant dit qu'Android avait une boîte à outils de développement natif qui permet au code C ++ de fonctionner sur Android.

Quelqu'un l'a-t-il utilisé et si oui, comment le trouvez-vous? Je veux dire, cela fonctionnera-t-il "comme iOS", ou y a-t-il d'autres considérations à prendre en compte en raison de la grande variété d'appareils Android disponibles?

Réponses:


26

Les API Android sont Java. Depuis 2010, Google fournit le NDK (un SDK) pour les développeurs C / C ++.

Le NDK offre deux façons:

  • pour les appareils Android 1.5, vous pouvez charger une bibliothèque elfe et l'utiliser à partir de l'application java via un pont JNI
  • pour les appareils Android 2.3, vous pouvez utiliser une NativeActivity pour contourner le code d'activité Java pour l'application plein écran.

Le NDK offre peu d'API C / C ++:

  • une pseudo libc appelée bionics: de nombreuses fonctions ne sont pas disponibles
  • une bibliothèque pthread
  • OpenGL ES 1.x (> Android 1.5) et OpenGL ES 2.x (Android 2.0)
  • OpenSL (prise en charge limitée sur Android 2.3)

Mais de nombreuses API sont uniquement Java (également disponibles via JNI).

La version NDK 5 est la première utilisable par les développeurs C ++ car elle offre:

  • RTTI
  • Prise en charge des exceptions
  • STLport
  • support gdb pour les programmes multi-thread

L'opération la plus douloureuse est le débogage sur les appareils Android. Je développe donc mon propre framework multi-plateforme (OS X, Windows, Linux, iOS et Android) pour déboguer d'abord sur la plateforme de bureau, la prochaine plateforme iOS (sur Simulator) et Last (Android).

L'émulateur Android (pas un simulateur) a de mauvaises performances et ne peut pas émuler OpenGL ES 2.x. Je recommande de développer de vrais appareils.

Vous pouvez trouver de nombreuses informations utiles:


Le lien "code d'entrée" est maintenant rompu.
Josh1billion

1
corrigé: changez Ellismarkov en IOPixel
Ellis

9

J'ai utilisé avec succès le NDK Android pour porter deux jeux SDL + OpenGL sur Android et je l'ai trouvé étonnamment facile. J'ai un wrapper Java de 200 lignes qui crée le contexte GL et fournit des classes utilitaires telles que le chargement d'entrée, de son et d'image pour le code C ++ à rappeler. L'exemple de programme "San-Angeles" du NDK est un excellent point de départ.

Soit dit en passant, il est possible de créer des programmes C / C ++ sans ligne de Java, mais je trouve pratique d'accéder à certaines méthodes au niveau du système d'exploitation en rappelant la JVM de temps en temps.

Je pense que si votre jeu compile déjà sous Linux, vous vous sentirez chez vous. Sur 100+ fichiers dans mon projet actuel, seulement 4 ont une #ifdef ANDROID_NDKdirective (les classes liées à l'image et au son).

En fait, la plupart du temps passé à porter le jeu était dû à un bug d'émulateur connu dont je n'étais pas au courant.


Plus tôt dans le passé, j'ai eu des problèmes (frustrants) pour essayer d'obtenir le pipeline simple de compilation / construction / déploiement de mon jeu opengl sur l'émulateur Android. Pouvez-vous m'indiquer une ressource ou quelque chose que je peux utiliser? (Je ne sais pas si vous avez ces classes utilitaires open source, mais si vous en avez, je serai intéressé de les voir.) Merci
brainydexter

1
@brainydexter: Je suis un gars en ligne de commande qui aime les autotools, donc je ne suis pas sûr que je vais vous être très utile, mais mon pipeline est le suivant: assurez ANDROID_NDK_ROOT- vous qu'il est défini, qu'il est dans $PATH(avec [sdk_location]/toolset [sdl_location]/platform-tools); allez dans le répertoire du projet; compiler le code NDK en utilisant ndk-build; compiler le code Java et construire le package en utilisant ant compile; télécharger vers l'émulateur ou l'appareil connecté à l'aide de ant install. Quant à l'openourcing du moteur, je n'ai pas encore décidé, mais je publie déjà du code sur le blog
sam hocevar

Merci pour le lien! Je garderai un œil sur ton blog.
brainydexter

4

Android prend en charge les applications natives depuis la version 1.5 jusqu'à Android NDK , ce qui devrait très bien couvrir votre public cible. Vous avez toujours besoin d'une simple application Java Android qui charge le côté natif de votre application via JNI et transmet par exemple les appels d'entrée et de rendu.

Il existe plusieurs versions du NDK, mais vous pouvez utiliser le dernier NDK et sélectionner l'API cible que vous souhaitez prendre en charge. Depuis la version 2.3 d'Android, vous pouvez faire beaucoup plus du côté natif et avoir besoin de moins de code Java, mais la prise en charge de l'appareil pour 2.3 est actuellement très limitée.

Le développement natif Android C / C ++ est une solution de travail au moins pour les jeux en plein écran et l'effort nécessaire pour porter les applications OpenGL ES C / C ++ existantes est assez faible.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.