- 配置ndk路径(local.properties)
ndk.dir=D\:\\AndroidStudio_2.3\\sdk\\ndk-bundle
* gradle配置使用ndk(gradle.properties)
android.useDeprecatedNdk=true
* 在module下的build.gradle添加ndk以及jni生成目录
ndk{
moduleName "native-lib"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
下面这个例子中,我们首先实例化JNI,通过JNI对象调用call()方法,然后就会执行c++中对应的方法,在c++方法中执行一系列操作后,我们可以通过反射调用JNI中的另一个方法addition(int x,int y),可以传递数据
- JNI.java
public class JNI{
static {
System.loadLibrary("native-lib");
}
public native void call();
public int addition(int x, int y) {
int result = x + y;
return result;
}
}
生成.h头文件
javah -jni com.sakuraqh.ndkdemo.JNI
- native-lib.cpp
#include "com_sakuraqh_ndkdemo_JNI.h"
#include <string>
extern "C" {
JNIEXPORT void JNICALL Java_com_sakuraqh_ndkdemo_JNI_call(JNIEnv *env, jobject instance) {
jclass clazz = (*env).FindClass("com/sakuraqh/ndkdemo/JNI");
jobject obj = (*env).AllocObject(clazz);
jmethodID methodId = (*env).GetMethodID(clazz, "addition", "(II)I");
//调用JNI中的addition方法
(*env).CallIntMethod(obj, methodId, 1, 2);
}
}