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