您的位置:首页 > 其它

JNI开发基础系列-JNI方法动态注册

2017-08-17 15:54 507 查看

JNI方法动态注册

java中创建FileUtils.java

package com.cool.ndktest2;

/**
* Created by cool on 2017/8/17.
*/

public class FileUtils {

public native void diff(String path,String pattrn,int num);
}


c中

//
// Created by cool on 2017/8/16.
//

#include "com_cool_ndktest2_MainActivity.h"
#include <string.h>
#include <android/log.h>
#include "add.h"
#include <assert.h>

#define TAG "399"
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG,__VA_ARGS__)
# define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))

JNIEXPORT void JNICALL native_diff
(JNIEnv *env, jclass clazz, jstring path, jstring pattern_Path, jint file_num)
{

LOGE("JNI begin 动态注册的方法 ");

}

static const JNINativeMethod gMethods[] = {
{
"diff","(Ljava/lang/String;Ljava/lang/String;I)V",(void*)native_diff
}
};

static int registerNatives(JNIEnv* engv)
{
LOGE("registerNatives begin");
jclass  clazz;
clazz = (*engv) -> FindClass(engv, "com/cool/ndktest2/FileUtils");

if (clazz == NULL) {
LOGE("clazz is null");
return JNI_FALSE;
}

if ((*engv) ->RegisterNatives(engv, clazz, gMethods, NELEM(gMethods)) < 0) {
LOGE("RegisterNatives error");
return JNI_FALSE;
}

return JNI_TRUE;
}

JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved)
{

LOGE("jni_OnLoad begin");

JNIEnv* env = NULL;
jint result = -1;

if ((*vm)->GetEnv(vm,(void**) &env, JNI_VERSION_1_4) != JNI_OK) {
LOGE("ERROR: GetEnv failed\n");
return -1;
}
assert(env != NULL);

registerNatives(env);

return JNI_VERSION_1_4;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: