Guest User

Untitled

a guest
Jan 11th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. extern "C" JavaVM *g_JavaVM = nullptr;
  2.  
  3. void setJVM(JavaVM *vm)
  4. {
  5. g_JavaVM = vm;
  6. }
  7.  
  8. JavaVM *getJVM()
  9. {
  10. return g_JavaVM;
  11. }
  12.  
  13. jint JNI_OnLoad(JavaVM* jvm, void* /*reserved*/)
  14. {
  15. JNIEnv *env;
  16. if (jvm->GetEnv((void**) &env, JNI_VERSION_1_6) != JNI_OK)
  17. {
  18. return -1;
  19. }
  20.  
  21. LOGI("JNI", "jvm(%p) on loading", jvm);
  22.  
  23. setJVM(jvm);
  24.  
  25. return JNI_VERSION_1_6;
  26. }
  27.  
  28. void JNI_OnUnload(JavaVM* jvm, void* /*reserved*/)
  29. {
  30. JNIEnv *env;
  31. if (jvm->GetEnv((void**) &env, JNI_VERSION_1_6) != JNI_OK) {
  32. return;
  33. }
  34.  
  35. LOGI("JNI", "jvm(%p) on unloading", getJVM());
  36.  
  37. setJVM(NULL);
  38. }
  39.  
  40. #define ATTACH_JVM(jni_env) \
  41. JNIEnv *g_env = NULL;\
  42. int env_status = getJVM()->GetEnv((void **)&g_env, JNI_VERSION_1_6); \
  43. bool bShouldDetach = false; \
  44. if(env_status == JNI_EDETACHED) {\
  45. jint attachResult = getJVM()->AttachCurrentThread(&jni_env, NULL); \
  46. if(attachResult >= 0) \
  47. bShouldDetach = true;\
  48. else \
  49. jni_env = NULL; \
  50. }\
  51. else if(JNI_OK == env_status){ \
  52. jni_env = g_env; \
  53. }\
  54. else {\
  55. jni_env = NULL; \
  56. }
  57.  
  58. #define DETACH_JVM(jni_env) { if( bShouldDetach ){ getJVM()->DetachCurrentThread(); }}
Add Comment
Please, Sign In to add comment