Android-Spieleentwicklung in c ++


26

Als primärer C / C ++ - Entwickler habe ich immer gedacht, dass die einzige Option für die Entwicklung mobiler Spiele für mich die Verwendung von iOS war, was C / C ++ (und die Minimierung von Ziel C) ermöglicht.

Ich habe von einem Freund gehört, dass Android ein natives Entwicklungs-Toolkit hat, mit dem C ++ - Code auf Android funktioniert.

Hat dies jemand verwendet und wenn ja, wie finden Sie es? Ich meine, wird es "nur funktionieren" wie iOS, oder gibt es weitere Überlegungen, die aufgrund der Vielzahl der verfügbaren Android-Geräte berücksichtigt werden müssen?

Antworten:


26

Android-APIs sind Java. Seit 2010 bietet Google das NDK (ein SDK) für C / C ++ - Entwickler an.

Das NDK bietet zwei Möglichkeiten:

  • Für Android 1.5-Geräte können Sie eine Elf-Bibliothek laden und über eine JNI-Brücke aus der Java-Anwendung verwenden
  • Für Android 2.3-Geräte können Sie mithilfe von NativeActivity den Java-Aktivitätscode für Vollbildanwendungen umgehen.

Das NDK bietet einige C / C ++ API:

  • Eine Pseudo-Bibliothek namens Bionik: Viele Funktionen sind nicht verfügbar
  • eine pthread-bibliothek
  • OpenGL ES 1.x (> Android 1.5) und OpenGL ES 2.x (Android 2.0)
  • OpenSL (eingeschränkte Unterstützung für Android 2.3)

Viele APIs sind jedoch nur Java (auch über JNI verfügbar).

NDK 5-Version ist die erste für C ++ - Entwickler verwendbare Version, da sie Folgendes bietet:

  • RTTI
  • Ausnahmen unterstützt
  • STLport
  • GDB-Unterstützung für Multithread-Programme

Die schmerzhafteste Operation ist das Debuggen auf Android-Geräten. Also entwickle ich mein eigenes Multi-Plattform-Framework (OS X, Windows, Linux, iOS und Android), um zuerst auf der Desktop-Plattform, dann auf der iOS-Plattform (auf Simulator) und zuletzt (Android) zu debuggen.

Der Android Emulator (kein Simulator) hat eine schlechte Leistung und kann OpenGL ES 2.x nicht emulieren. Ich empfehle echte Geräte zu entwickeln.

Hier finden Sie viele nützliche Informationen:


Der Link "Eingabecode" ist jetzt unterbrochen.
Josh1billion

1
Behoben: Ändere Ellismarkov in IOPixel
Ellis

9

Ich habe das Android NDK erfolgreich verwendet , um zwei SDL + OpenGL-Spiele auf Android zu portieren, und fand es überraschend einfach. Ich besitze einen 200-Zeilen-Java-Wrapper, der den GL-Kontext erstellt und Dienstprogrammklassen wie Eingabe, Ton und Bild bereitstellt, damit der C ++ - Code zurückgerufen werden kann. Das Musterprogramm "San Angeles" im NDK ist ein hervorragender Ausgangspunkt.

Übrigens ist es möglich, C / C ++ - Programme ohne Java-Zeile zu erstellen, aber ich finde es bequem, auf einige Methoden auf Betriebssystemebene zuzugreifen, indem ich von Zeit zu Zeit die JVM zurückrufe.

Ich denke, wenn Ihr Spiel bereits unter Linux kompiliert wird, werden Sie sich wie zu Hause fühlen. Von über 100 Dateien in meinem aktuellen Projekt haben nur 4 eine #ifdef ANDROID_NDKDirektive (die Bild- und Ton-bezogenen Klassen).

Tatsächlich lag die meiste Zeit , die ich mit dem Portieren des Spiels verbrachte, an einem bekannten Emulator-Fehler , den ich nicht kannte.


Früher hatte ich (frustrierende) Probleme beim Versuch, die einfache Pipeline zum Kompilieren / Erstellen / Bereitstellen meines OpenGL-Spiels auf dem Android-Emulator zu finden. Können Sie mich auf eine Ressource verweisen, die ich verwenden kann? (Ich weiß nicht, ob Sie diese Utility-Klassen Open Source haben, aber wenn ja, würde ich sie
gerne

1
@brainydexter: Ich bin ein Kommandozeilen-Typ, der Spaß an den Autotools hat, daher bin ich mir nicht sicher, ob ich Ihnen sehr hilfreich sein kann, aber meine Pipeline sieht folgendermaßen aus: Stellen Sie sicher ANDROID_NDK_ROOT, dass festgelegt ist, dass es in $PATH(zusammen mit [sdk_location]/toolsund [sdl_location]/platform-tools) ist; gehe in das Projektverzeichnis; kompilieren Sie den NDK-Code mit ndk-build; Kompilieren Sie den Java-Code und erstellen Sie das Paket mit ant compile; Zum Emulator oder angeschlossenen Gerät hochladen mit ant install. Was das OpenSourcing der Engine
angeht

Danke für den Link! Ich werde nach deinem Blog Ausschau halten.
Brainydexter

4

Android unterstützt native Anwendungen seit Version 1.5 über Android NDK , die Ihre Zielgruppe sehr gut abdecken sollten. Sie benötigen weiterhin eine einfache Android-Java-Anwendung, die die native Seite Ihrer Anwendung über JNI lädt und z. B. Eingaben weiterleitet und Aufrufe rendert.

Es gibt mehrere Versionen des NDK, Sie können jedoch das neueste NDK verwenden und die zu unterstützende Ziel-API auswählen. Seit der Android-Version 2.3 können Sie viel mehr auf der nativen Seite tun und benötigen weniger Java-Code, aber die Geräteunterstützung für 2.3 ist derzeit sehr begrenzt.

Die native Android C / C ++ - Entwicklung ist eine funktionierende Lösung, zumindest für Vollbildspiele, und der Aufwand für die Portierung vorhandener C / C ++ - OpenGL ES-Anwendungen ist relativ gering.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.