Con l'aggiornamento di Android Studio alla 1.0, il supporto della toolchain NDK è migliorato immensamente ( nota: leggi i miei aggiornamenti in fondo a questo post per vedere l'utilizzo con il nuovo plug-in sperimentale Gradle e Android Studio 1.5 ).
Android Studio e NDK sono integrati abbastanza bene, quindi è sufficiente creare un blocco ndk {} nel build.gradle del modulo e impostare i file di origine nella directory (module) / src / main / jni - e tu sei fatto!
Non più ndk-build dalla riga di comando.
Ho scritto tutto al riguardo nel mio post sul blog qui: http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
I punti salienti sono:
Ci sono due cose che devi sapere qui. Per impostazione predefinita, se si dispone di librerie esterne che si desidera caricare nell'applicazione Android, vengono cercate in (modulo) / src / main / jniLibs per impostazione predefinita. Puoi cambiarlo impostando sourceSets.main.jniLibs.srcDirs in build.gradle del tuo modulo. Avrai bisogno di una sottodirectory con librerie per ogni architettura che stai prendendo di mira (ad es. X86, arm, mips, arm64-v8a, ecc ...)
Il codice che si desidera compilare per impostazione predefinita dalla toolchain NDK si troverà in (module) / src / main / jni e in modo simile sopra, è possibile modificarlo impostando sourceSets.main.jni.srcDirs nel build.gradle del modulo
e inseriscilo nel build.gradle del tuo modulo:
ndk {
moduleName "SeePlusPlus" // Name of C++ module (i.e. libSeePlusPlus)
cFlags "-std=c++11 -fexceptions" // Add provisions to allow C++11 functionality
stl "gnustl_shared" // Which STL library to use: gnustl or stlport
}
Questo è il processo di compilazione del codice C ++, da lì è necessario caricarlo e creare wrapper - ma a giudicare dalla tua domanda, sai già come fare tutto ciò, quindi non ricomincerò.
Inoltre, ho inserito un repository Github di questo esempio qui: http://github.com/sureshjoshi/android-ndk-swig-example
AGGIORNAMENTO: 14 giugno 2015
Quando esce Android Studio 1.3, dovrebbe esserci un miglior supporto per C ++ tramite il plug-in CLion JetBrains. Attualmente suppongo che ciò consentirà lo sviluppo di Java e C ++ da Android Studio; comunque penso che dovremo ancora usare la sezione Gradle NDK come ho detto sopra. Inoltre, penso che ci sarà ancora la necessità di scrivere i file wrapper Java <-> C ++, a meno che CLion non li esegua automaticamente.
AGGIORNAMENTO: 5 gennaio 2016
Ho aggiornato il mio blog e repository Github (nel ramo di sviluppo) per utilizzare Android Studio 1.5 con l'ultimo plug-in sperimentale Gradle (0.6.0-alpha3).
http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
http://github.com/sureshjoshi/android-ndk-swig-example
La build Gradle per la sezione NDK ora appare così:
android.ndk {
moduleName = "SeePlusPlus" // Name of C++ module (i.e. libSeePlusPlus)
cppFlags.add("-std=c++11") // Add provisions to allow C++11 functionality
cppFlags.add("-fexceptions")
stl = "gnustl_shared" // Which STL library to use: gnustl or stlport
}
Inoltre, abbastanza sorprendentemente, Android Studio ha il completamento automatico per C ++ - wrapper generati da Java usando la parola chiave "nativa":
Tuttavia, non è completamente roseo ... Se stai usando SWIG per avvolgere una libreria per generare automaticamente il codice, e quindi provare a usare la generazione automatica della parola chiave nativa, metterà il codice nella posizione sbagliata nel tuo Swig _wrap .cxx file ... Quindi è necessario spostarlo nel blocco "extern C":
AGGIORNAMENTO: 15 ottobre 2017
Sarei remissivo se non avessi menzionato che Android Studio 2.2 in poi ha essenzialmente il supporto "nativo" (senza giochi di parole) per la toolchain NDK tramite Gradle e CMake. Ora, quando crei un nuovo progetto, seleziona il supporto C ++ e sei a posto.
Sarà comunque necessario generare il proprio codice layer JNI o utilizzare la tecnica SWIG che ho menzionato sopra, ma le impalcature di un C ++ in un progetto Android ora sono banali.
Le modifiche nel file CMakeLists (che è dove si posizionano i file sorgente C ++) verranno rilevate da Android Studio e ricompileranno automaticamente tutte le librerie associate.