Con la actualización de Android Studio a 1.0, el soporte de la cadena de herramientas NDK mejoró inmensamente ( nota: lea mis actualizaciones al final de esta publicación para ver el uso con el nuevo complemento experimental Gradle y Android Studio 1.5 ).
Android Studio y el NDK se integran lo suficientemente bien como para que solo necesite crear un bloque ndk {} en el build.gradle de su módulo y configurar sus archivos de origen en el directorio (module) / src / main / jni, y estará ¡hecho!
No más ndk-build desde la línea de comandos.
He escrito todo sobre esto en mi blog aquí: http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
Los puntos más destacados son:
Hay dos cosas que debes saber aquí. De forma predeterminada, si tiene bibliotecas externas que desea cargar en la aplicación de Android, se buscan en el (módulo) / src / main / jniLibs de forma predeterminada. Puede cambiar esto mediante la configuración de sourceSets.main.jniLibs.srcDirs en build.gradle de su módulo. Necesitará un subdirectorio con bibliotecas para cada arquitectura a la que se dirige (por ejemplo, x86, arm, mips, arm64-v8a, etc.)
El código que desea que la cadena de herramientas NDK compile de manera predeterminada se ubicará en (module) / src / main / jni y, de manera similar a lo anterior, puede cambiarlo configurando sourceSets.main.jni.srcDirs en build.gradle de su módulo
y pon esto en el build.gradle de tu módulo:
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
}
Ese es el proceso de compilar su código C ++, desde allí debe cargarlo y crear envoltorios, pero a juzgar por su pregunta, ya sabe cómo hacer todo eso, por lo que no volveré a hacer hash.
Además, he colocado un repositorio de Github de este ejemplo aquí: http://github.com/sureshjoshi/android-ndk-swig-example
ACTUALIZACIÓN: 14 de junio de 2015
Cuando salga Android Studio 1.3, debería haber un mejor soporte para C ++ a través del complemento JetBrains CLion. Actualmente estoy asumiendo que esto permitirá el desarrollo de Java y C ++ desde Android Studio; Sin embargo, creo que aún tendremos que usar la sección Gradle NDK como he dicho anteriormente. Además, creo que aún será necesario escribir archivos de envoltura Java <-> C ++, a menos que CLion los haga automáticamente.
ACTUALIZACIÓN: 5 de enero de 2016
He actualizado mi blog y el repositorio de Github (en la rama de desarrollo) para usar Android Studio 1.5 con el último complemento experimental de 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 compilación de Gradle para la sección NDK ahora se ve así:
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
}
Además, bastante asombroso, Android Studio tiene autocompletado para C ++: contenedores generados por Java usando la palabra clave 'nativa':
Sin embargo, no es completamente color de rosa ... Si está utilizando SWIG para ajustar una biblioteca para generar automáticamente el código, y luego intenta usar la palabra clave nativa autogeneración, colocará el código en el lugar incorrecto en su Swig _wrap archivo .cxx ... Por lo tanto, debe moverlo al bloque "C externo":
ACTUALIZACIÓN: 15 de octubre de 2017
Sería negligente si no mencionara que Android Studio 2.2 en adelante tiene soporte esencialmente 'nativo' (sin juego de palabras) para la cadena de herramientas NDK a través de Gradle y CMake. Ahora, cuando cree un nuevo proyecto, simplemente seleccione el soporte de C ++ y estará listo.
Aún necesitará generar su propio código de capa JNI, o usar la técnica SWIG que he mencionado anteriormente, pero el andamiaje de un proyecto C ++ en Android es trivial ahora.
Android Studio recogerá los cambios en el archivo CMakeLists (que es donde coloca los archivos fuente de C ++) y volverá a compilar automáticamente las bibliotecas asociadas.