Com a atualização do Android Studio para 1.0, o suporte à cadeia de ferramentas NDK melhorou imensamente ( nota: leia minhas atualizações na parte inferior desta postagem para ver o uso com o novo plugin experimental Gradle e o Android Studio 1.5 ).
O Android Studio e o NDK estão integrados o suficiente para que você apenas precise criar um bloco ndk {} no build.gradle do seu módulo e defina seus arquivos de origem no diretório (module) / src / main / jni - e você feito!
Chega de ndk-build a partir da linha de comando.
Eu escrevi tudo sobre isso no meu blog aqui: http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
Os pontos salientes são:
Há duas coisas que você precisa saber aqui. Por padrão, se você possui bibliotecas externas que deseja carregar no aplicativo Android, elas são procuradas no (módulo) / src / main / jniLibs por padrão. Você pode alterar isso usando a configuração sourceSets.main.jniLibs.srcDirs no build.gradle do seu módulo. Você precisará de um subdiretório com bibliotecas para cada arquitetura segmentada (por exemplo, x86, arm, mips, arm64-v8a, etc ...)
O código que você deseja compilar por padrão pela cadeia de ferramentas NDK estará localizado em (módulo) / src / main / jni e, da mesma forma que acima, você pode alterá-lo definindo sourceSets.main.jni.srcDirs no build.gradle do seu módulo
e coloque isso no build.gradle do seu 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
}
Esse é o processo de compilação do código C ++, a partir daí você precisa carregá-lo e criar wrappers - mas, a julgar pela sua pergunta, você já sabe como fazer tudo isso, para que eu não volte a usar o hash.
Além disso, coloquei um repositório Github deste exemplo aqui: http://github.com/sureshjoshi/android-ndk-swig-example
ATUALIZAÇÃO: 14 de junho de 2015
Quando o Android Studio 1.3 for lançado, deve haver um suporte melhor ao C ++ por meio do plug-in JetBrains CLion. Atualmente, estou no pressuposto de que isso permitirá o desenvolvimento de Java e C ++ no Android Studio; no entanto, acho que ainda precisamos usar a seção Gradle NDK, como afirmei acima. Além disso, acho que ainda haverá a necessidade de gravar arquivos wrapper Java <-> C ++, a menos que o CLion os faça automaticamente.
ATUALIZAÇÃO: 5 de janeiro de 2016
Atualizei meu blog e o repositório do Github (no ramo de desenvolvimento) para usar o Android Studio 1.5 com o mais recente plugin experimental 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
A compilação Gradle para a seção NDK agora se parece com isso:
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
}
Além disso, surpreendentemente, o Android Studio possui preenchimento automático para C ++ - wrappers gerados em Java usando a palavra-chave 'native':
No entanto, não é totalmente otimista ... Se você estiver usando o SWIG para quebrar uma biblioteca para gerar automaticamente o código e, em seguida, tentar usar a geração automática de palavras-chave nativas, ele colocará o código no lugar errado no seu swig _wrap .cxx ... Então você precisa movê-lo para o bloco "extern C":
ATUALIZAÇÃO: 15 de outubro de 2017
Seria negligente se não mencionasse que o Android Studio 2.2 em diante tem essencialmente suporte 'nativo' (sem trocadilhos) para a cadeia de ferramentas NDK via Gradle e CMake. Agora, quando você cria um novo projeto, basta selecionar o suporte ao C ++ e pronto.
Você ainda precisará gerar seu próprio código de camada JNI ou usar a técnica SWIG que mencionei acima, mas o andaime de um projeto C ++ no Android é trivial agora.
As alterações no arquivo CMakeLists (onde você coloca seus arquivos de origem C ++) serão capturadas pelo Android Studio e recompilarão automaticamente todas as bibliotecas associadas.