Es sind ein paar Schritte erforderlich, um den NDK in Android Studio zu integrieren. Gegenwärtig ist die Unterstützung als experimentell markiert und AS beginnt, die Fähigkeit zum Herunterladen des NDK innerhalb der IDE zu bündeln. Standardmäßig verwendet AS einen generischen Code Android.mk
und Application.mk
, wenn die Quellen und/oder Bibliotheken im Ordner jni
oder jniLibs
abgelegt sind. Die folgenden Anweisungen überschreiben diese Standardeinstellungen, um mehr Anpassungsmöglichkeiten zu bieten.
Kurz gesagt, müssen Sie:
- Erstellen Sie den Standard
jni
und jniLibs
Verzeichnisse für Ihre Quelle und Libs.
- Sagen Android Studio, wo Ihre NDK build Kette
- Sagen gradle zu finden, wie zu kompilieren und wo Ihre Libs
platzieren
- Eine
Android.mk
Datei Gebäude zu spezifizieren und zu verknüpfen, um
- eine Quelle erstellen
erstellen Verzeichnisse
Innerhalb /app/src/main
erstellen Sie ein jni
und jniLibs
Verzeichnis.
aktualisieren local.properties
In Ihrem local.properties
Datei, fügen Sie eine Zeile ähnlich wie:
ndk.dir=/home/nathan/development/bin/android-ndk-r10e
aktualisieren build.gradle
Dies bezieht sich auf Modulebene , nicht die Anwendungsebene. Dies stellt sicher, dass wir den Build-Pfad im obigen Schritt definiert haben und Android Studio nicht mehr in der Lage ist, ndk-build automatisch aufzurufen. Verwenden Sie das folgende Beispiel als Richtlinie.
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.0"
defaultConfig.with {
applicationId = "com.example.hellojni"
minSdkVersion.apiLevel = 4
targetSdkVersion.apiLevel = 23
}
}
compileOptions.with {
sourceCompatibility=JavaVersion.VERSION_1_7
targetCompatibility=JavaVersion.VERSION_1_7
}
/*
* native build settings
*/
android.ndk {
moduleName = "hello-jni"
/*
* Other ndk flags configurable here are
* cppFlags += "-fno-rtti"
* cppFlags += "-fno-exceptions"
* ldLibs = ["android", "log"]
* stl = "system"
*/
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles += file('proguard-rules.txt')
}
}
android.productFlavors {
// for detailed abiFilter descriptions, refer to "Supported ABIs" @
// https://developer.android.com/ndk/guides/abis.html#sa
create("arm") {
ndk.abiFilters += "armeabi"
}
create("arm7") {
ndk.abiFilters += "armeabi-v7a"
}
create("arm8") {
ndk.abiFilters += "arm64-v8a"
}
create("x86") {
ndk.abiFilters += "x86"
}
create("x86-64") {
ndk.abiFilters += "x86_64"
}
create("mips") {
ndk.abiFilters += "mips"
}
create("mips-64") {
ndk.abiFilters += "mips64"
}
// To include all cpu architectures, leaves abiFilters empty
create("all")
}
}
Android.mk
Sie werden innerhalb des /app/src/main/jni
Verzeichnis
LOCAL_PATH := $(call my-dir)
# Builds a dylib out of test.cpp
include $(CLEAR_VARS)
LOCAL_MODULE := test
LOCAL_SRC_FILES := test.cpp
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)
test.cpp
Fügen Sie einige ehrfürchtige C/C++ Quellcode eine Android.mk
Datei benötigen für deine lib. Diese Dateien werden in /app/src/main/jni
beginnen und wird in Ihrem Android.mk
Beispieldatei
#include <jni.h>
#include <android/log.h>
static const char *SOME_TAG = "MyAwesomeTag";
extern "C"
{
void
Java_com_something_something_1android_ClassName_some_fn(JNIEnv *env, jobject obj)
{
__android_log_print(ANDROID_LOG_VERBOSE, SOME_TAG, "Hello from NDK :)");
}
} // End extern
Kompilieren und Ausführen als angegeben kompiliert und verknüpft werden.
können Sie .so-Datei mit Studio 2.1 generieren? – Hunt