JNI动态调用

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值