Wie erstelle ich eine gemeinsame Bibliothek in C ++ für Android und iOS?

8

Ich verwende LibGDX, um Apps für Android und iOS zu schreiben, und ich möchte meinen Apps C ++ - Code hinzufügen, um bestimmte Teile zu optimieren und einige Funktionen zu portieren.

Ich habe im Internet gesucht und versucht, einigen Tutorials zu folgen, habe aber nicht gefunden, was ich brauche.

Wie kann ich eine sehr einfache C ++ - Bibliothek schreiben, die ich in LibGDX laden kann? Welche Werkzeuge brauche ich? Visual Studio? Ich entwickle in Android Studio.

Ich denke, dass ich eine .so-Datei für Android und eine .a-Datei für iOS brauche, ist das richtig?

    
Z0q 10.03.2016, 23:59
quelle

1 Antwort

5

Auf beiden Plattformen ist es möglich, eine vorkompilierte Bibliothek sowie C ++ - Quellcode direkt einzubinden.

Unter Android sollten Sie sich mit dem Android NDK befassen. Auf diese Weise können Sie nativen C / C ++ - Code einbinden, der auf Java überbrückt werden kann. Die Verbindung zwischen Java und C / C ++ wird mit dem JNI verwaltet. Es ist ein ziemlich langweiliges, peinliches System für die Kommunikation zwischen C ++ und Java. Sie sollten in die Einrichtung eines Android.mk makefile schauen, das angibt, wie Sie Ihre Bibliothek (oder den Quellcode) in Ihren Build einbinden können.

Bei iOS ist es etwas enger verbunden. Sie können über Objective-C ++ - Dateien verfügen, die sowohl C ++ - als auch Objective-C-Code ausführen können. Wenn Sie Swift verwenden, ist es ein wenig anders (Bridging zwischen Objective-C ++ und Swift).

Wenn die Plattform (Android / iOS) in einigen Fällen Funktionen bietet, die besser oder realistischer sind als C ++, könnten Sie den Code so entwickeln, dass Ihr C ++ bei Bedarf auf die Plattform zugreifen kann. Dies bedeutet, dass Sie möglicherweise Header mit separaten Implementierungsdateien pro Plattform haben.

  • thing.h
  • thing_android.cpp
  • thing_ios.mm

Die Android.mk -Datei der Android-App enthält thing_android.cpp (aber nicht thing_ios.mm ). Diese Datei könnte die JNI-Bridge überqueren, um bei Bedarf mit Java zu kommunizieren, wenn Sie etwas vom Android SDK benötigen.

Die iOS App enthält thing_ios.mm (aber nicht thing_android.cpp ). Die Erweiterung .mm bedeutet Objective-C ++, sodass die Datei bei Bedarf direkt leistungsstarke Cocoa-Bibliotheken aufrufen kann.

Schließlich sollten Sie auf allen Plattformen sicherstellen, dass Sie Ihre Nutzung von C ++ auf die Plattform mit dem kleinsten gemeinsamen Nenner reduzieren. Mit anderen Worten, wenn iOS eine bestimmte Funktion von C ++ unterstützt und Android nicht, dann können Sie diese spezielle Funktion nicht verwenden.

    
drhr 11.03.2016, 01:19
quelle

Tags und Links