NDK:动态注册方法

Posted 一介闲休

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NDK:动态注册方法相关的知识,希望对你有一定的参考价值。

#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring

JNIEXPORT  JNICALL stringFromJNI(
        JNIEnv *env,
        jobject /* this */) 
    std::string hello = "Hello from C++1";
    return env->NewStringUTF(hello.c_str());


#define JNIREG_CLASS "learn/yc/jnilearn/MainActivity"//指定类

static JNINativeMethod getMethods[] = 
        "hello","()Ljava/lang/String;",(void *) stringFromJNI
;

static int registerNativeMethods(JNIEnv * env, const char * className,
JNINativeMethod* gMethods, int numMethods)

    jclass  clazz;
    clazz = env->FindClass(className);
    if(clazz == NULL)
        return JNI_FALSE;
    
    if(env->RegisterNatives(clazz,gMethods,numMethods)<0)
        return JNI_FALSE;
    
    return JNI_TRUE;


static int registerNatives(JNIEnv * env)
    if(!registerNativeMethods(env,JNIREG_CLASS,getMethods,sizeof(getMethods)/sizeof(getMethods[0])))
        return JNI_FALSE;
    return JNI_TRUE;


JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM * vm, void * reserved)
    JNIEnv * env = NULL;
    jint result = -1;
    if(vm->GetEnv((void **)&env,JNI_VERSION_1_4) != JNI_OK)
        return result;
    
    assert(env != NULL);
    if(!registerNatives(env))
        return result;
    
    result = JNI_VERSION_1_4;
    return result;



 

以上是关于NDK:动态注册方法的主要内容,如果未能解决你的问题,请参考以下文章

ndk之C调用java方法以及动态注册

ndk之C调用java方法以及动态注册

ndk之C调用java方法以及动态注册

NDK笔记--静态注册与动态注册

NDK笔记--静态注册与动态注册

Android Studio NDK 入门教程--JNI动态注册本地方法