Mit dem Update von Android Studio auf 1.0 wurde die Unterstützung der NDK-Toolchain immens verbessert ( Hinweis: Bitte lesen Sie meine Updates am Ende dieses Beitrags, um die Verwendung mit dem neuen experimentellen Gradle-Plugin und Android Studio 1.5 zu sehen ).
Android Studio und das NDK sind gut genug integriert, sodass Sie nur einen ndk {} -Block im build.gradle Ihres Moduls erstellen und Ihre Quelldateien in das Verzeichnis (module) / src / main / jni legen müssen - und schon sind Sie da getan!
Kein ndk-Build mehr über die Kommandozeile.
Ich habe alles darüber in meinem Blog-Beitrag hier geschrieben: http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
Die wichtigsten Punkte sind:
Hier müssen Sie zwei Dinge wissen. Wenn Sie externe Bibliotheken haben, die in die Android-Anwendung geladen werden sollen, werden diese standardmäßig in der Datei (module) / src / main / jniLibs gesucht. Sie können dies ändern, indem Sie sourceSets.main.jniLibs.srcDirs im build.gradle Ihres Moduls festlegen. Sie benötigen ein Unterverzeichnis mit Bibliotheken für jede Architektur, auf die Sie abzielen (z. B. x86, arm, mips, arm64-v8a usw.).
Der Code, den Sie standardmäßig von der NDK-Toolchain kompilieren möchten, befindet sich in (module) / src / main / jni. Ähnlich wie oben können Sie ihn ändern, indem Sie sourceSets.main.jni.srcDirs im build.gradle Ihres Moduls festlegen
und fügen Sie dies in das build.gradle Ihres Moduls ein:
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
}
Das ist der Prozess des Kompilierens Ihres C ++ - Codes. Von dort aus müssen Sie ihn laden und Wrapper erstellen. Nach Ihrer Frage zu urteilen, wissen Sie jedoch bereits, wie das alles funktioniert, damit ich nicht erneut hashe.
Außerdem habe ich hier ein Github-Repo dieses Beispiels platziert: http://github.com/sureshjoshi/android-ndk-swig-example
UPDATE: 14. Juni 2015
Wenn Android Studio 1.3 herauskommt, sollte C ++ über das JetBrains CLion-Plugin besser unterstützt werden. Ich gehe derzeit davon aus, dass dies die Entwicklung von Java und C ++ in Android Studio ermöglicht. Ich denke jedoch, dass wir weiterhin den Gradle NDK-Abschnitt verwenden müssen, wie ich oben angegeben habe. Ich denke außerdem, dass Java <-> C ++ - Wrapper-Dateien weiterhin geschrieben werden müssen, es sei denn, CLion führt diese automatisch aus.
UPDATE: 5. Januar 2016
Ich habe mein Blog und mein Github-Repo (im Entwicklungszweig) aktualisiert, um Android Studio 1.5 mit dem neuesten experimentellen Gradle-Plugin (0.6.0-alpha3) zu verwenden.
http://www.sureshjoshi.com/mobile/android-ndk-in-android-studio-with-swig/
http://github.com/sureshjoshi/android-ndk-swig-example
Der Gradle-Build für den NDK-Abschnitt sieht nun folgendermaßen aus:
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
}
Außerdem hat Android Studio eine automatische Vervollständigung für C ++ - Java-generierte Wrapper mit dem Schlüsselwort 'native':
Es ist jedoch nicht ganz rosig ... Wenn Sie SWIG verwenden, um eine Bibliothek zum automatischen Generieren von Code zu verpacken, und dann versuchen, das native Schlüsselwort zur automatischen Generierung zu verwenden, wird der Code an der falschen Stelle in Ihrem Swig _wrap abgelegt .cxx-Datei ... Sie müssen sie also in den Block "extern C" verschieben:
UPDATE: 15. Oktober 2017
Ich würde mich sehr freuen, wenn ich nicht erwähnen würde, dass Android Studio 2.2 ab im Wesentlichen "native" (kein Wortspiel) Unterstützung für die NDK-Toolchain über Gradle und CMake bietet. Wenn Sie jetzt ein neues Projekt erstellen, wählen Sie einfach C ++ - Unterstützung und los geht's.
Sie müssen immer noch Ihren eigenen JNI-Layer-Code generieren oder die oben erwähnte SWIG-Technik verwenden, aber das Gerüst eines C ++ in Android-Projekts ist jetzt trivial.
Änderungen in der CMakeLists-Datei (in der Sie Ihre C ++ - Quelldateien ablegen) werden von Android Studio übernommen und alle zugehörigen Bibliotheken automatisch neu kompiliert.