2016-03-10 20 views
8

Sto usando LibGDX di scrivere applicazioni per Android e iOS e voglio essere in grado di aggiungere il codice C++ per le mie applicazioni per ottimizzare alcune parti e alla porta alcune funzioni eccCome posso creare una libreria condivisa in C++ per Android e iOS?

Ho cercato in internet e ho cercato seguire alcuni tutorial, ma non ho trovato quello di cui avevo bisogno.

Come posso scrivere una libreria C++ di base che posso caricare in LibGDX? Quali strumenti devo usare? Visual Studio? Sviluppo in Android Studio.

Penso che ho bisogno di un file .so per Android e un file .a per iOS, è corretto?

risposta

5

Su entrambe le piattaforme, è possibile includere direttamente una libreria precompilata e un codice sorgente C++.

Su Android, ti consigliamo di utilizzare Android NDK. Ciò consente di includere codice C/C++ nativo in grado di eseguire il bridge su Java. La connessione tra Java e C/C++ è gestita con JNI. È un sistema abbastanza noioso e scomodo per comunicare tra C++ e Java. Ti consigliamo di configurare un makefile Android.mk che specifica come includere la libreria (o il codice sorgente) nella tua build.

Su iOS, è un po 'più strettamente collegato. È possibile avere file Objective-C++ in grado di eseguire sia il codice C++ che il codice Objective-C. Se stai usando Swift, è un po 'diverso (fare da ponte tra Objective-C++ e Swift).

In alcuni casi, quando la piattaforma (Android/iOS) fornisce funzionalità superiori a quelle possibili o realistiche con C++, potresti trovarti a progettare il codice in modo che il tuo C++ possa raggiungere la piattaforma secondo necessità. Ciò significa che potresti avere intestazioni con file di implementazione separati per piattaforma.

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

il file del android app Android.mk comprenderà thing_android.cpp (ma non thing_ios.mm). Questo file potrebbe attraversare il bridge JNI per parlare con Java secondo necessità, ogni volta che ti serve qualcosa da Android SDK.

L'app per iOS include thing_ios.mm (ma non thing_android.cpp). L'estensione .mm significa Objective-C++, in modo che il file possa chiamare direttamente potenti librerie Cocoa, se necessario.

Infine, su tutte le piattaforme, dovrai essere sicuro di ridimensionare l'utilizzo del C++ alla piattaforma con il minimo comune denominatore. In altre parole, se iOS supporta una particolare funzionalità di C++ e Android no, non è possibile utilizzare quella particolare funzionalità.

+0

Grazie per la risposta esauriente. Ho letto della toolchain NDK. È possibile utilizzare Visual Studio 2015 per scrivere una libreria multipiattaforma per Android/iOS (che compila in '.so' e' .a'? O cosa consiglieresti? – Z0q

+1

Non vedo perché non potresti Lo faccio, per alcune aziende che vogliono mantenere chiusa la loro libreria, è una pratica standard: mi è capitato di usare Xcode, per la comodità di testare direttamente l'app per iOS e di apportare modifiche rapide alla sorgente Objective-C e C++ codice, ma nello stesso modo ho anche compilato il codice C++ direttamente nel build di Android, che segnalava problemi di compilazione in anticipo. – drhr

+1

Grazie. Come faccio a compilare '.so' e' .a'? – Z0q