1.声明navtive方法。
public native int addKey(char key);
2.创建nativeImpl.cpp文件映射native方法。
#include "jni.h"
#include "string"
#define NATIVEAPICLASS "com/ft/natives/NativeAPI"
/**
* 1.定义本地方法与java方法对应的表,这里JNI提供了一个结构体JNINativeMethod来对应表。
2.JNI_OnLoad方法触发:当java类调用System.loadLibrary或者System.load时触发JNI的此方法
3.注册本地方法,使用JNIEnv结构体指针中的RegisterNatives方法来注册本地函数。
*/
jint addKey(JNIEnv* env, jobject obj, jchar key){
printf("%s", "1112223334454556456456");
return 12345646;
}
// 1.定义本地方法与java方法对应的表,这里JNI提供了一个结构体JNINativeMethod来对应表。 {java中的native方法名,参数类型,JNI方法}
static JNINativeMethod method_tables[] = {
{"addKey", "(C)I", (void*)addKey},
};
JavaVM* mJavaVm;
//2.JNI_OnLoad方法触发:当java类调用System.loadLibrary或者System.load时触发JNI的此方法
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved){
JNIEnv* env = NULL;
jint result = JNI_FALSE;
if (vm->GetEnv((void**)&env, JNI_VERSION_1_6) != JNI_OK){
return result;
}
if(env == NULL){
return result;
}
// 给JavaVM赋值
env->GetJavaVM(&mJavaVm);
//获取类引用
jclass clazz = env->FindClass(NATIVEAPICLASS);
if (clazz == NULL) {
return result;
}
//3.注册本地方法,使用JNIEnv结构体指针中的RegisterNatives方法来注册本地函数。
if (env->RegisterNatives(clazz,method_tables,sizeof(method_tables)/sizeof(method_tables[0]))<0){
return result;
}
result = JNI_VERSION_1_6;
return result;
}