JNI动态注册

NativeInterface.h

 

//
// Created by xubaipei on 2018/3/21.
//

#ifndef OPDEMO_NATIVEINTERFACE_H
#define OPDEMO_NATIVEINTERFACE_H
#include <jni.h>
#include "NativeRender.h"
#include "L.h"


#endif //OPDEMO_NATIVEINTERFACE_H

NativeInterFace.cpp

 

//
// Created by xubaipei on 2018/3/21.
//

#include "NativeInterface.h"

static JNINativeMethod methods[] = {
        {"onFrameCreate","()V",(void*)NativeRender::onSurfaceCreated},
        {"onFrameChange","(II)V",(void*)NativeRender::onSurfaceChanged},
        {"onDrawFrame","()V",(void*)NativeRender::onDrawFrame},
        {"onFrameDestory","()V",(void*)NativeRender::onFrameDestroy},
};

const char* ClassName = "com/example/xiuhu/opgldemo/utils/NativeUtils";//指定要注册的类 即nativie方法所在的类


static int registerMethods(JNIEnv* env, const char* className,JNINativeMethod* methods,int methodNum)
{
    if(env == nullptr)
    {
        return JNI_FALSE;
    }
    jclass clazz = env->FindClass(className);
    if (clazz == nullptr)
    {
        LOGE(LOG_TAG,"not find class!");
        return  JNI_FALSE;
    }
    if (env->RegisterNatives(clazz,methods,methodNum) < 0)
    {
        LOGE(LOG_TAG,"register methods faild!");
        return JNI_FALSE;
    }
    return JNI_TRUE;
}


static int registerNativeMethods(JNIEnv* env)
{
    return registerMethods(env,ClassName,methods, sizeof(methods) / sizeof(methods[0]));
}


JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM * vm,void *reseved)
{
    JNIEnv* env = nullptr;
    if(vm->GetEnv((void**)&env,JNI_VERSION_1_6) != JNI_OK)
    {
        return JNI_ERR;
    }
    if (!registerNativeMethods(env))
    {
        return JNI_ERR;
    }
    return JNI_VERSION_1_6;
}

3:NativeUtils

 

package com.example.xiuhu.opgldemo.utils;

import android.content.res.AssetManager;

/**
 * Created by xubaipei on 2017/1/15.
 */

public class NativeUtils {
    static {
        System.loadLibrary("gl2jni");
    }
    public static native void  onFrameCreate();
    public static native void  onFrameChange(int width, int height);
    public static native void  onDrawFrame();
    public static native void  onFrameDestory();

    public static native void initNativeAssetManager(AssetManager assetManager);
}

4:c call java

 

void Java_com_xubaipei_utils_Demo_javaCallc(JNIEnv* env,jobject obj)
{
//    jclass cls = env->GetObjectClass(obj);
    jclass  cls = env->FindClass("com/xubaipei/utils/Demo");
    cls = env->FindClass("com/xubaipei/utils/Demo");

    jmethodID methodId = env->GetStaticMethodID(cls,"cCallJava","()V");
    env->CallStaticVoidMethod(cls,methodId);
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值