| #include "logger.h" |
| |
| JavaVM *gJavaVM; |
| const char *kringservicePath = "cx/ring/service/RingserviceJNI"; |
| |
| void deinitClassHelper(JNIEnv *env, jobject obj) { |
| RING_INFO("deinitClassHelper"); |
| |
| /* delete cached object instances */ |
| env->DeleteGlobalRef(obj); |
| RING_INFO("deinitClassHelper: object %x deleted", obj); |
| } |
| |
| JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { |
| JNIEnv *env; |
| jclass clazz; |
| jint r; |
| |
| RING_INFO("JNI_OnLoad"); |
| |
| //Assume it is c++ |
| r = vm->GetEnv ((void **) &env, JNI_VERSION_1_6); |
| if (r != JNI_OK) { |
| RING_ERR("JNI_OnLoad: failed to get the environment using GetEnv()"); |
| return -1; |
| } |
| RING_INFO("JNI_Onload: GetEnv %p", env); |
| |
| clazz = env->FindClass (kringservicePath); |
| if (!clazz) { |
| RING_ERR("JNI_Onload: whoops, %s class not found!", kringservicePath); |
| } |
| gJavaVM = vm; |
| RING_INFO("JNI_Onload: JavaVM %p", gJavaVM); |
| |
| /* put instances of class object we need into cache */ |
| //initClassHelper(env, kManagerPath, &gManagerObject); |
| |
| JNINativeMethod methods[] = { |
| |
| $defs |
| |
| }; |
| |
| r = env->RegisterNatives (clazz, methods, (int) (sizeof(methods) / sizeof(methods[0]))); |
| return JNI_VERSION_1_6; |
| } |
| |
| void JNI_OnUnLoad(JavaVM* vm, void* reserved) { |
| JNIEnv* env; |
| jclass clazz; |
| |
| RING_INFO("JNI_OnUnLoad"); |
| |
| /* get env */ |
| if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { |
| RING_ERR("JNI_OnUnLoad: failed to get the environment using GetEnv()"); |
| return; |
| } |
| RING_INFO("JNI_OnUnLoad: GetEnv %p", env); |
| |
| /* Get jclass with env->FindClass */ |
| clazz = env->FindClass(kringservicePath); |
| if (!clazz) { |
| RING_ERR("JNI_OnUnLoad: whoops, %s class not found!", kringservicePath); |
| } |
| |
| /* remove instances of class object we need into cache */ |
| //deinitClassHelper(env, gManagerObject); |
| |
| env->UnregisterNatives(clazz); |
| RING_INFO("JNI_OnUnLoad: Native functions unregistered"); |
| } |