Avec la mise à jour d'Android Studio vers 1.0, le support de la chaîne d'outils NDK s'est énormément amélioré ( note: veuillez lire mes mises à jour au bas de cet article pour voir l'utilisation avec le nouveau plugin expérimental Gradle et Android Studio 1.5 ).
Android Studio et le NDK sont suffisamment bien intégrés pour qu'il vous suffise de créer un bloc ndk {} dans le build.gradle de votre module et de définir vos fichiers source dans le répertoire (module) / src / main / jni - et vous êtes terminé!
Plus de ndk-build à partir de la ligne de commande.
J'ai tout écrit à ce sujet dans mon article de blog ici: http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
Les points saillants sont:
Il y a deux choses que vous devez savoir ici. Par défaut, si vous avez des bibliothèques externes que vous souhaitez charger dans l'application Android, elles sont recherchées dans le (module) / src / main / jniLibs par défaut. Vous pouvez modifier cela en utilisant le paramètre sourceSets.main.jniLibs.srcDirs dans build.gradle de votre module. Vous aurez besoin d'un sous-répertoire avec des bibliothèques pour chaque architecture que vous ciblez (par exemple x86, arm, mips, arm64-v8a, etc.)
Le code que vous souhaitez compiler par défaut par la chaîne d'outils NDK sera situé dans (module) / src / main / jni et de la même manière que ci-dessus, vous pouvez le modifier en définissant sourceSets.main.jni.srcDirs dans build.gradle de votre module
et mettez ceci dans build.gradle de votre module:
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
}
C'est le processus de compilation de votre code C ++, à partir de là, vous devez le charger et créer des wrappers - mais à en juger par votre question, vous savez déjà comment faire tout cela, donc je ne re-hacherai pas.
De plus, j'ai placé un dépôt Github de cet exemple ici: http://github.com/sureshjoshi/android-ndk-swig-example
MISE À JOUR: 14 juin 2015
Lorsque Android Studio 1.3 sortira, il devrait y avoir une meilleure prise en charge de C ++ via le plugin JetBrains CLion. Je suppose actuellement que cela permettra le développement Java et C ++ à partir d'Android Studio; Cependant, je pense que nous devrons toujours utiliser la section Gradle NDK comme je l'ai indiqué ci-dessus. De plus, je pense qu'il sera toujours nécessaire d'écrire des fichiers wrapper Java <-> C ++, à moins que CLion ne le fasse automatiquement.
MISE À JOUR: 5 janvier 2016
J'ai mis à jour mon blog et mon dépôt Github (dans la branche de développement) pour utiliser Android Studio 1.5 avec le dernier plugin expérimental 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 construction Gradle pour la section NDK ressemble maintenant à ceci:
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
}
De plus, tout à fait incroyable, Android Studio a une saisie semi-automatique pour C ++ - les wrappers générés par Java à l'aide du mot-clé `` natif '':
Cependant, ce n'est pas tout à fait rose ... Si vous utilisez SWIG pour envelopper une bibliothèque afin de générer automatiquement du code, puis essayez d'utiliser la génération automatique de mot-clé natif, cela mettra le code au mauvais endroit dans votre Swig _wrap Fichier .cxx ... Vous devez donc le déplacer dans le bloc "extern C":
MISE À JOUR: 15 octobre 2017
Je m'en voudrais de ne pas mentionner qu'Android Studio 2.2 et les versions ultérieures ont essentiellement un support `` natif '' (sans jeu de mots) pour la chaîne d'outils NDK via Gradle et CMake. Maintenant, lorsque vous créez un nouveau projet, sélectionnez simplement le support C ++ et vous êtes prêt à partir.
Vous devrez toujours générer votre propre code de couche JNI ou utiliser la technique SWIG que j'ai mentionnée ci-dessus, mais l'échafaudage d'un projet C ++ dans Android est désormais trivial.
Les modifications dans le fichier CMakeLists (où vous placez vos fichiers source C ++) seront récupérées par Android Studio, et il recompilera automatiquement toutes les bibliothèques associées.