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?
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.
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.
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_NDK
Direktive (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.
quelle
ANDROID_NDK_ROOT
, dass festgelegt ist, dass es in$PATH
(zusammen mit[sdk_location]/tools
und[sdl_location]/platform-tools
) ist; gehe in das Projektverzeichnis; kompilieren Sie den NDK-Code mitndk-build
; Kompilieren Sie den Java-Code und erstellen Sie das Paket mitant compile
; Zum Emulator oder angeschlossenen Gerät hochladen mitant install
. Was das OpenSourcing der EngineAndroid 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.
quelle