Sono necessari alcuni passaggi per collegare NDK a Android Studio. Attualmente, il supporto è contrassegnato come sperimentale e AS sta iniziando a offrire la possibilità di scaricare l'NDK all'interno dell'IDE. Per impostazione predefinita, AS utilizza un valore generico Android.mk
e Application.mk
quando la posta e/o le librerie sono posizionate nella cartella jni
o jniLibs
. Le istruzioni sottostanti sovrascrivono quelle predefinite al fine di fornire più capacità di personalizzazione.
In breve, è necessario:
- Creare il default
jni
e jniLibs
directory per la vostra sorgente e librerie.
- Dillo Android Studio dove trovare la tua NDK catena accumulo
- Dillo Gradle come compilare e dove posizionare i vostri librerie
- Creare un file
Android.mk
per specificare costruzione e il collegamento ordine
- Crea qualche fonte
Crea directory
All'interno di /app/src/main
creare una directory jni
e jniLibs
.
Aggiornamento local.properties
Dentro il file local.properties
, aggiungere una linea simile a:
ndk.dir=/home/nathan/development/bin/android-ndk-r10e
Aggiornamento build.gradle
Questo si riferisce al livello di modulo , non il livello di applicazione. Ciò garantisce che abbiamo definito il percorso di generazione nel passaggio precedente e rimuove la possibilità per Android Studio di richiamare automaticamente ndk-build. Utilizzare il seguente esempio come guida.
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
Avrete bisogno di un file all'interno della directory Android.mk
/app/src/main/jni
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
Aggiungete un po 'impressionante C/C++ di codice sorgente per la tua lib Questi file inizieranno nel /app/src/main/jni
e saranno compilato e collegato, come specificato nella Android.mk
file di esempio
#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
compilare ed eseguire.
sei riuscito a generare file .so utilizzando lo studio 2.1? – Hunt