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à.
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
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
Grazie. Come faccio a compilare '.so' e' .a'? – Z0q